Pandas中与df.diff()相反的操作是什么?

9

我在论坛上搜索,寻找一种更加简洁的方式来创建一个新的数据框列,该列是前一行与当前行之和,这与.diff()函数相反,该函数取得差值。

以下是我目前解决问题的方法:

df = pd.DataFrame ({'c':['dd','ee','ff', 'gg', 'hh'], 'd':[1,2,3,4,5]}
df['e']= df['d'].shift(-1)
df['f'] = df['d'] + df['e']

感谢您的想法。


你的解决方案看起来不错,应该会很快。 - BENY
我的原始方法比滚动方法快得多-0.002352657423882435,而被接受的答案是0.011872950857238607。 - MissBleu
就像我预期的那样。 - BENY
@MissBleu 请尝试使用更大的数据框。 - rpanai
3个回答

10

您可以使用窗口大小为2和求和的rolling

df['f'] = df['d'].rolling(2).sum().shift(-1)

    c  d    f
0  dd  1  3.0
1  ee  2  5.0
2  ff  3  7.0
3  gg  4  9.0
4  hh  5  NaN

1
这正是我所期望的!谢谢! - MissBleu

6

df.cumsum()

Example:
data = {'a':[1,6,3,9,5], 'b':[13,1,2,5,23]}
df = pd.DataFrame(data)

df = 
    a   b
0   1   13
1   6   1
2   3   2
3   9   5
4   5   23

df.diff()

a   b
0   NaN NaN
1   5.0 -12.0
2   -3.0    1.0
3   6.0 3.0
4   -4.0    18.0

df.cumsum()

a   b
0   1   13
1   7   14
2   10  16
3   19  21
4   24  44

1
它与diff()完全相反。 - Harshal Deore

0

如果由于多重索引或其他原因无法使用rolling,您可以尝试使用.cumsum(),然后使用.diff(-2)将.cumsum()结果从前两个位置减去。

data = {'a':[1,6,3,9,5,30, 101, 8]}
df = pd.DataFrame(data)
df['opp_diff'] = df['a'].cumsum().diff(2)

    a   opp_diff
0   1   NaN
1   6   NaN
2   3   9.0
3   9   12.0
4   5   14.0
5   30  35.0
6   101 131.0
7   8   109.0

通常要获取 .diff(n) 的反向操作,您应该能够执行 .cumsum().diff(n+1)。问题在于,您将会得到前 n+1 个结果作为 NaN。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接