Python 指定行上的.diff()
我见过许多类似的问题,但没有一个能解决我的问题 我有一个非常大的数据集,我只想找到与前一行的几个选定行的差异。在下面的示例中,我希望根据calc中的值在pVal上获取diff(),如下所示:Python 指定行上的.diff(),python,pandas,dataframe,Python,Pandas,Dataframe,我见过许多类似的问题,但没有一个能解决我的问题 我有一个非常大的数据集,我只想找到与前一行的几个选定行的差异。在下面的示例中,我希望根据calc中的值在pVal上获取diff(),如下所示: pVal calc pDiff 1 .17 False NaN 2 .31 False NaN 3 .46 False NaN 4 .39 Tru
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”下用NaN替换pDiff,而不是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的行的值的解决方案 试试看
df['shifted'] = df.calc.shift()
df1 = df[(df.calc == True) | (df.shifted == True)]
df1.pdidff = df1.pVal.diff()
试试看
np.其中
+shift
非常适合根据条件进行上一行或下一行比较:)
np.其中
+shift
非常适合根据条件进行上一行或下一行比较:)
运行:
df['pDiff']=np.where(df.calc,df.pVal.diff(),np.nan)
df.pVal.diff()。
df.calc
是条件,np.nan
是“其他”值。运行:df['pDiff']=np.where(df.calc,df.pVal.diff(),np.nan)
df.pVal.diff()。
df.calc
是条件,np.nan
是“其他”值
df['pDiff'] = np.where((df['calc'] == True), df['pVal'] - df['pVal'].shift(), np.nan)