从熊猫中的成对行条目创建新列

时间:2020-03-30 08:26:39

标签: python-3.x pandas

我有一个如下所示的数据框

>>> df
    t    c  f  e
0   1  100  2  1
1   1  200  1  1
2   1  300  4  0
3   1  400  2  0
4   2  100  3  1
5   2  200  3  1
6   2  300  4  1
7   2  400  1  0
8   3  100  4  0
9   3  200  3  0
10  3  300  1  1
11  3  400  4  1
12  4  100  1  1
13  4  200  4  1
14  4  300  4  1
15  4  400  2  1

我想使用行的成对信息来添加新列。在上述情况下,如果第i行和第(i + 4)行的列'e'具有相同的值,我想添加值为1的新列“ rr”(如果i + 4索引确实为0,不存在),类似地,我还想添加另一列'rr2'是第i行,第(I + 1)行的列'e'具有相同的值。

>>> df
    t    c  f  e rr rr2
0   1  100  2  1 1  1    
1   1  200  1  1 0  1
2   1  300  4  0 1  0
3   1  400  2  0 0  1
4   2  100  3  1 1  0
5   2  200  3  1 1  0
6   2  300  4  1 0  1
7   2  400  1  0 1  0
8   3  100  4  0 1  0
9   3  200  3  0 0  1
10  3  300  1  1 1  1
11  3  400  4  1 1  1
12  4  100  1  1 1  0
13  4  200  4  1 1  0
14  4  300  4  1 1  0
15  4  400  2  1 1  0

我的想法是使用apply方法

X['rr'] = X.apply(lambda x: func1(x),axis=1 )
X['rr2'] = X.apply(lambda x: func2(x),axis=1 )

但是在那种情况下,我将无法访问原始数据帧的i + 1或i + 4索引。 有没有一种方法可以有效地做到这一点,而不是一个接一个地遍历每一行。

1 个答案:

答案 0 :(得分:1)

使用Series.shift

df['rr'] = df['e'].eq(df['e'].shift(-4)).astype(int)
df['rr2'] = df['e'].eq(df['e'].shift(-1)).astype(int)
print(df)

    t    c  f  e  rr  rr2
0   1  100  2  1   1    1
1   1  200  1  1   1    0
2   1  300  4  0   0    1
3   1  400  2  0   1    0
4   2  100  3  1   0    1
5   2  200  3  1   0    1
6   2  300  4  1   1    0
7   2  400  1  0   0    1
8   3  100  4  0   0    1
9   3  200  3  0   0    0
10  3  300  1  1   1    1
11  3  400  4  1   1    1
12  4  100  1  1   0    1
13  4  200  4  1   0    1
14  4  300  4  1   0    1
15  4  400  2  1   0    0

注意:

比较NaN时,结果始终返回False

相关问题