[英]Alternative to pandas groupby with lambda and diff
假設我在下面有df
:
ID V
0 A 1
1 A 2
2 B 4
3 B 3
所需的 output 是:
V
0 NaN
1 1.0
2 NaN
3 -1.0
這可以使用groupby
和lambda
和diff
來完成:
df.groupby('ID').apply(lambda x: x.diff())
我正在嘗試提出一個不依賴於lambda
的解決方案,因為這很快就會變得非常慢。 有任何想法嗎?
更新
(1) 使用groupby
、 lambda
和diff
與 (2) 僅使用groupby
和diff
之間的性能比較:
1
3.67 ms ± 238 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2
2.42 ms ± 20.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
使用.agg
並傳遞diff
df.groupby('ID')['V'].agg('diff')
0 NaN
1 1.0
2 NaN
3 -1.0
好吧,在這種情況下, groupby 對象直接支持diff
:
>>> df
ID V
0 A 1
1 A 2
2 B 4
3 B 3
>>> df.groupby('ID').diff()
V
0 NaN
1 1.0
2 NaN
3 -1.0
>>>
但我不確定這是否真的會提高你的表現。 在列上使用.apply
,即在第一個軸上,不應該比上面慢,它基本上是等價的(不像.apply
上使用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.