2016-08-10 5 views
5

Ich habe ein DataFrame, die ich gruppiere. Ich möchte dem Datenrahmen eine weitere Spalte hinzufügen, die ein Ergebnis der Funktion diff ist, pro Gruppe. Etwas wie:Ändern Pandas Gruppe

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 
         'foo', 'bar', 'foo', 'foo'], 
        'B' : ['one', 'one', 'two', 'three', 
          'two', 'two', 'one', 'three'], 
        'C' : np.random.randn(8), 
        'D' : np.random.randn(8)}) 
df_grouped = df.groupby('B') 
for name, group in df_grouped: 
    new_df["D_diff"] = group["D"].diff() 

Ich mag würde für jede Gruppe der differnece der Spalte D bekommen, und haben eine DF, die eine neue Spalte mit der Diff-Berechnung enthalten.

Antwort

5

IIUC Sie DataFrameGroupBy.diff verwenden können:

df['D_diff'] = df.groupby('B')['D'].diff() 
print (df) 
    A  B   C   D D_diff 
0 foo one 1.996084 0.580177  NaN 
1 bar one 1.782665 0.042979 -0.537198 
2 foo two -0.359840 1.952692  NaN 
3 bar three -0.909853 0.119353  NaN 
4 foo two -0.478386 -0.970906 -2.923598 
5 bar two -1.289331 -1.245804 -0.274898 
6 foo one -1.391884 -0.555056 -0.598035 
7 foo three -1.270533 0.183360 0.064007 
+0

Das ist, was ich getan habe. – piRSquared