2017-05-13 8 views
1

Ich muss den Unterschied zwischen zwei Zeilen gruppenweise mit Pandas berechnen.berechnen Reihendifferenz gruppenweise in Pandas

| Group | Value | ID | 
---------------------- 
| M1 | 10 | F1 | 
---------------------- 
| M1 | 11 | F2 | 
---------------------- 
| M1 | 12 | F3 | 
---------------------- 
| M1 | 15 | F4 | 
---------------------- 

Beispiel Ausgabe:.

---------------------- 
| M1 | F3 - F2 | 1 | 
---------------------- 
| M1 | F4 - F1 | 5 | 

die Summe zu berechnen, ich pandas.groupby ('Gruppe') sum() verwenden würde, aber wie man den Unterschied zwischen Zeilen, in denen die Zeilen Bestellung berechnen ist wichtig?

Antwort

1

Ich glaube, Sie benutzerdefinierte Funktion mit apply müssen die DataFrame für jede Gruppe zurückkehren, für ausgewählte von Position verwendet wird iat:

def f(x): 
    #print (x) 
    a = x['Value'].iat[2] - x['Value'].iat[1] 
    b = x['Value'].iat[3] - x['Value'].iat[0] 
    c = x['ID'].iat[2] + ' - ' + x['ID'].iat[1] 
    d = x['ID'].iat[3] + ' - ' + x['ID'].iat[0] 
    return pd.DataFrame({'Value': [a,b], 'ID':[c,d]}) 

df = df.groupby('Group').apply(f).reset_index(level=1, drop=True).reset_index() 
print (df) 

    Group  ID Value 
0 M1 F3 - F2  1 
1 M1 F4 - F1  5 
+0

Danke für mich in der richtigen Richtung. Wie würde dies aktualisiert werden, um nach ID-Werten z.B. "F2" im Gegensatz zu ihnen, d. H. Iat [2] – Andrew

+0

Sind immer in jeder Gruppe "F1 - F4"? – jezrael

+0

Wenn 'F1' in jeder Gruppe immer' e = x.loc [x ['ID'] == 'F1', 'Wert']. Item() 'ist, ist es ein bisschen kompliziert wenn manchmal' F1' ist fehlt in einer Gruppe 'e = x.loc [x ['ID'] == 'F1', 'Wert']' und dann 'e = np.nan wenn e.empty sonst e.item()' – jezrael

Verwandte Themen