簡體   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