繁体   English   中英

使用 lambda 和 diff 替代 pandas groupby

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

这可以使用groupbylambdadiff来完成:

df.groupby('ID').apply(lambda x: x.diff())

我正在尝试提出一个不依赖于lambda的解决方案,因为这很快就会变得非常慢。 有任何想法吗?

更新

(1) 使用groupbylambdadiff与 (2) 仅使用groupbydiff之间的性能比较:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM