2016-08-03 15 views
1

Ich bin neu in Pandas. Ich habe mehrere dfs. Die Daten in der Spalte 0 sind die ID und in den Spalten 1-10 sind Wahrscheinlichkeiten. Ich möchte den spaltenweisen Durchschnitt der Spalten 1-10 über die dfs nehmen. Die Zeilen sind möglicherweise nicht in der gleichen Reihenfolge.Mittelung Pandas Datenrahmen aus bestimmten Spalten

Gibt es eine bessere Möglichkeit, es zu tun, als jedes df auf ID zu sortieren und dann die add/divide df-Funktionen zu verwenden? Jede Hilfe wird geschätzt.

Vielen Dank für Ihre Kommentare. Um zu verdeutlichen, muss ich die 2 dfs element weise. I.e. (Nur 1 zeigt Zeile jeder df):

Df1:  id132456, 1, 2, 3, 4 
Df2:  id132456, 2, 2, 3, 2 
Averaged: id132456, 1.5, 2, 3, 3 
+0

Pandas verwendet Indizes für viele Operationen (Hinzufügen, dividieren etc.). Wenn Sie ID als Index festlegen, müssen Sie nicht sortieren. – ayhan

Antwort

1

Es sieht aus wie Bedarf concat und mean:

import pandas as pd 

df1 = pd.DataFrame({0:[14254,25445,34555], 
        1:[1,2,3], 
        2:[1,1,1], 
        3:[1,2,0]}) 

print (df1) 
     0 1 2 3 
0 14254 1 1 1 
1 25445 2 1 2 
2 34555 3 1 0 

df2 = pd.DataFrame({0:[14254,25445,34555], 
        2:[1,0,0], 
        1:[1,0,1], 
        3:[1,2,0]}) 

print (df2) 
     0 1 2 3 
0 14254 1 1 1 
1 25445 0 0 2 
2 34555 1 0 0 
#list of all DataFrames 
dfs = [df1, df2] 
print (pd.concat(dfs, ignore_index=True)) 
     0 1 2 3 
0 14254 1 1 1 
1 25445 2 1 2 
2 34555 3 1 0 
3 14254 1 1 1 
4 25445 0 0 2 
5 34555 1 0 0 

#select all columns without first 
print (pd.concat(dfs, ignore_index=True).ix[:,1:]) 
    1 2 3 
0 1 1 1 
1 2 1 2 
2 3 1 0 
3 1 1 1 
4 0 0 2 
5 1 0 0 

Ich bin nicht sicher, welche Art von Mittelwert brauchen, so dass ich hinzufügen beide:

#mean per rows 
print (pd.concat(dfs, ignore_index=True).ix[:,1:].mean(1)) 
0 1.000000 
1 1.666667 
2 1.333333 
3 1.000000 
4 0.666667 
5 0.333333 
dtype: float64 

#mean per columns 
print (pd.concat(dfs, ignore_index=True).ix[:,1:].mean()) 
1 1.333333 
2 0.666667 
3 1.000000 
dtype: float64 

Vielleicht brauchen Sie etwas anderes:

dfs = [df1.set_index(0), df2.set_index(0)] 
print (pd.concat(dfs, ignore_index=True, axis=1)) 
     0 1 2 3 4 5 
0      
14254 1 1 1 1 1 1 
25445 2 1 2 0 0 2 
34555 3 1 0 1 0 0 

print (pd.concat(dfs, ignore_index=True, axis=1).mean(1)) 
0 
14254 1.000000 
25445 1.166667 
34555 0.833333 
dtype: float64 

print (pd.concat(dfs, ignore_index=True, axis=1).mean()) 
0 2.000000 
1 1.000000 
2 1.000000 
3 0.666667 
4 0.333333 
5 1.000000 
dtype: float64 
Verwandte Themen