计算Pandas数据框列 - 布尔逻辑和偏移数据
根据Pandas数据框中的信息,我想计算一个新的列。下面是我想做的一个例子。起始数据是:
{'A': [1, 1, 0, 0, 1, 1, 0, 0, 0]}
根据这些数据,我想用以下逻辑来计算新列B:如果当前行的前两行(也就是A的第(row-2)和第(row-1)行)都是1,那么B的当前行就等于1;否则,B的当前行就等于0。我想得到这样的结果:
{'A': [1, 1, 0, 0, 1, 1, 0, 0, 0], 'B': [0, 0, 1, 0, 0, 0, 1, 0, 0]}
这样做有没有办法不通过逐行循环数据框呢?
1 个回答
2
如果 d
是你的数据框(DataFrame):
>>> d['B'] = ((d.A.shift(2)==1) & (d.A.shift(1)==1)).astype(int)
>>> d
A B
0 1 0
1 1 0
2 0 1
3 0 0
4 1 0
5 1 0
6 0 1
7 0 0
8 0 0
shift
是一个可以把某一列的数据向前或向后移动的方法,这样你就可以比较不同的行中的值。用 &
的括号表达式会返回你想要的结果,但结果是布尔值(也就是 True 和 False),而不是 1 和 0。所以我用了 .astype(int)
把它们转换成 1 和 0。根据你的需求,这一步可能不是必须的,因为布尔值本身也是整数,所以在整数计算中也可以使用。