我在论坛上搜索,寻找一种更加简洁的方式来创建一个新的数据框列,该列是前一行与当前行之和,这与.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']
感谢您的想法。
我在论坛上搜索,寻找一种更加简洁的方式来创建一个新的数据框列,该列是前一行与当前行之和,这与.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']
感谢您的想法。
您可以使用窗口大小为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
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
如果由于多重索引或其他原因无法使用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。