熊猫的可变班次

时间:2016-07-22 10:17:51

标签: python pandas shift

在数据框中有两列A和B:

   A   B
0  1   6
1  2   7
2  1   8
3  2   9
4  1  10

我想创建一列C.C必须将B的值移动A的值:

   A   B   C 
0  1   6 NaN
1  2   7 NaN
2  1   8   7
3  2   9   7
4  1  10   9

命令:

df['C'] = df['B'].shift(df['A'])

不起作用。 你还有其他想法吗?

2 个答案:

答案 0 :(得分:3)

我会使用numpy的帮助来避免apply

l = np.arange(len(df)) - df.A.values
df['C'] = np.where(l >=0, df.B.values[l], np.nan)
df

   A   B    C
0  1   6  NaN
1  2   7  NaN
2  1   8  7.0
3  2   9  7.0
4  1  10  9.0

简单时间测试

enter image description here

答案 1 :(得分:1)

由于索引对齐,这很棘手,您可以在df上定义用户func和apply行,此处函数将对B列执行移位并返回索引值(使用{{ 1}}}属性,用于返回已移位列的索引):

.name