我知道这会添加相同索引的连续列:
df['C'] = df['A'] + df['B']
但是如何添加不同索引的列:
假设我有一个这样的数据框:
df
A B
0 9 40
1 1 70
2 5 80
3 8 30
4 7 50
我需要创建另一个列C
,它是列A
的当前索引行(即idx)和列B
的前一个索引行(即idx-1)的添加,例如:
df
A B C
0 9 40 (9)
1 1 70 (40 + 1)
2 5 80 (70 + 5)
3 8 30 (80 + 8)
4 7 50 (30 + 7)
最终结果应如下所示:
df
A B C
0 9 40 9
1 1 70 41
2 5 80 75
3 8 30 88
4 7 50 37
答案 0 :(得分:5)
您可以使用Series.shift
。
df['C'] = df['A'] + df['B'].shift(1).fillna(0)
答案 1 :(得分:1)
使用Series.add
的其他解决方案:
df['C'] = df['A'].add(df['B'].shift(), fill_value=0)
print (df)
A B C
0 9 40 9.0
1 1 70 41.0
2 5 80 75.0
3 8 30 88.0
4 7 50 37.0
<强>计时强>:
In [2]: %timeit df['C'] = df['A'].add(df['B'].shift(), fill_value=0)
1000 loops, best of 3: 457 µs per loop
In [3]: %timeit df['C1'] = df['A'] + df['B'].shift(1).fillna(0)
1000 loops, best of 3: 544 µs per loop
如果需要功能,您可以添加列名(类似用于其他解决方案):
def f(a,b,c):
df[c] = df[a].add(df[b].shift(), fill_value=0)
return df
print (f('A','B','C'))
A B C
0 9 40 9.0
1 1 70 41.0
2 5 80 75.0
3 8 30 88.0
4 7 50 37.0
答案 2 :(得分:0)
使用shift
:
df['C'] = df.A + df.B.shift().fillna(0)