2017-07-14 5 views
0
d = pd.DataFrame({'a':[7,6,3,4,8], 'b':['c','c','d','d','c']}) 
d.groupby('b')['a'].diff() 

Gibt mirPandas diff zwischen aufeinanderfolgenden Gruppen innerhalb

0 NaN 
1 -1.0 
2 NaN 
3 1.0 
4 2.0 

Was würde ich brauche

0 NaN 
1 -1.0 
2 NaN 
3 1.0 
4 NaN 

Welche Differenz zwischen aufeinander folgenden Werten nur innerhalb der Gruppe ist, so dass, wenn eine Gruppe nach der anderen erscheint Gruppe werden die vorherigen Werte ignoriert.

In meinem Beispiel letzte c Wert ist eine neue c Gruppe.

Antwort

2

Sie würden an aufeinander folgenden Segmenten groupby müssen

In [1055]: d.groupby((d.b != d.b.shift()).cumsum())['a'].diff() 
Out[1055]: 
0 NaN 
1 -1.0 
2 NaN 
3 1.0 
4 NaN 
Name: a, dtype: float64 

Einzelheiten

In [1056]: (d.b != d.b.shift()).cumsum() 
Out[1056]: 
0 1 
1 1 
2 2 
3 2 
4 3 
Name: b, dtype: int32 
+0

wow.That ist ein netter Trick. – joseph

Verwandte Themen