在熊猫中是否有相当于excel的公式

时间:2018-04-26 03:56:30

标签: python excel pandas numpy

我有一个时间序列数据集,我需要在我的字段中找到差异 每一滴都。

在excel中,我可以通过编写公式B2 = A2-A1并将此公式复制到整个B列中来轻松完成此任务

示例:

enter image description here

使用pandas有没有直接的方法呢?

我考虑过apply(),但看起来它只适用于系列的1个元素

我的另一个选择是从我的列A中创建一个Numpy数组并运行它。然而,这似乎是一种迂回的方式,如果我需要引用来自不同

的元素,则会变得更加复杂

我需要翻译的实际Excel公式是= IF((A3-A2)> 0,(A3-A2),A3 +(4294967296-A2))

3 个答案:

答案 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参数吗?