我有一个时间序列数据集,我需要在我的字段中找到差异 每一滴都。
在excel中,我可以通过编写公式B2 = A2-A1并将此公式复制到整个B列中来轻松完成此任务
示例:
使用pandas有没有直接的方法呢?
我考虑过apply(),但看起来它只适用于系列的1个元素
我的另一个选择是从我的列A中创建一个Numpy数组并运行它。然而,这似乎是一种迂回的方式,如果我需要引用来自不同
的元素,则会变得更加复杂我需要翻译的实际Excel公式是= IF((A3-A2)> 0,(A3-A2),A3 +(4294967296-A2))
答案 0 :(得分:1)
获取系列使用的滞后差异
df['my_column'].diff()
如果你想做一些与1不同的事情,也可以指定延迟。
有关详细信息,请参阅documentation
修改强> 以下是解决公式的可能方法:
df = pd.DataFrame({'A': [20, 22, 25, 43, 23, 45, 67, 50, 70]})
df['result'] = df['A'].diff()
df['result'][ df['result'] < 0 ] += 2**32 # you can disregard the pandas warning
根据您的逻辑,您可以简单地取diff
,如果结果小于零,则添加常量2**32
。它应该比差异几倍更有效率(虽然这可能不是一个大问题)。
答案 1 :(得分:1)
这可能会有所帮助。我没有测试过:为此,请提供一些具有所需输出的数据(文本形式)。
df[1] = np.where(df[0].diff() > 0, df[0].diff(), df[0].shift() + 2**32 - df[0])
答案 2 :(得分:0)
这就是我现在使用numpy解决问题的方法
(翻译Excel公式= IF((A3-A2)> 0,(A3-A2),A3 +(2 ** 32-A2)))
s1=np.array(df[0])
s=s1[1:]-s1[0:-1]
s[s<0]=s[s<0]+(2**32)
我确实觉得在熊猫中可以有更优雅的解决方案。如果df.diff()可以采用lambda参数吗?