[英]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.