【发布时间】:2020-11-12 01:11:29
【问题描述】:
假设我在下面有df:
ID V
0 A 1
1 A 2
2 B 4
3 B 3
而期望的输出是:
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)
【问题讨论】:
-
是什么让你相信它会很慢?
-
将其应用于大型数据帧的经验。
-
是什么让你认为 lambda 是我应该说的缓慢的结果?
-
只是假设,如果有大量的组,这就像应用
diff太多次并降低性能。但你是对的,也许lambda不是问题所在。你的直觉是什么? -
groupby + lambda + diff:
3.67 ms ± 238 µs per loop (mean ± std. dev. of 7 runs, 100 loops each).。 groupby + diff:2.42 ms ± 20.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each).
标签: python pandas dataframe lambda pandas-groupby