【发布时间】:2020-06-20 02:31:18
【问题描述】:
我见过很多类似的问题,但没有一个能解决我的问题。
我有一个非常大的数据集,我想在其中找到与前一行中选定的几行的差异。在 fol 示例中,我想根据 calc 中的值获取 pVal 上的 diff(),如图所示:
pVal calc pDiff
1 .17 False NaN
2 .31 False NaN
3 .46 False NaN
4 .39 True -.07
5 .26 False NaN
6 .6 True .34
注意:pDiff 默认获取 NaN
可以简单地计算所有行的差异,然后在“calc”下将 pDiff 替换为 NaN 反对 False。但如前所述,我有一个非常大的数据集,在 calc 列中只有很少的“真”值,所以开销很大。
我尝试了以下方法:
df['pDiff'] = df[df['calc']==True]['pVal'].diff()
但它给出了不正确的结果,计算了 calc==True 的行之间的差异。在我们的示例中,第 6 行的差异在第 6 行和第 4 行之间计算 (0.6 - 0.39 = 0.21),而不是在第 6 行和第 5 行之间计算出预期的 0.34。第 4 行的差异仍然是 NaN 是 calc==True 的第一行。
我可以选择遍历所有行,但这对我来说太慢了。
我需要一个解决方案,仅计算和更改 calc 包含 True 的那些行的值。
【问题讨论】: