添加不同索引的列

时间:2016-07-18 19:10:05

标签: python pandas

我知道这会添加相同索引的连续列:

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

3 个答案:

答案 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)