根据当前行和上一行的数据将新列分配给数据框

时间:2019-07-16 13:23:12

标签: python pandas dataframe

我有2列数据,分别称为1级事件和2级事件。
两者都是1和0的列。

lev_1 lev_2 lev_2_&_lev_1
0    1    0      0
1    0    0      0
2    1    0      0
3    1    1      1
4    1    0      0

col['lev2_&_lev_1] = 1,如果当前行的lev_2和上一行的lev_1均为1。
我通过使用for循环实现了这一点。

i = 1  
while i < a.shape[0]:
    if a['lev_1'].iloc[i - 1] == 1 &  a['lev_2'].iloc[i] == 1:
        a['lev_2_&_lev_1'].iloc[i] = 1
    i += 1

我想知道一种计算有效的方法,因为我的原始df非常大。
谢谢!

2 个答案:

答案 0 :(得分:1)

您要

(df['lev_2'] & df['lev_1'].shift()).astype(int)

答案 1 :(得分:1)

使用np.where.shift()

df['lev_2_&_lev_1'] = np.where(df['lev_2'].eq(1) & df['lev_1'].shift().eq(1), 1, 0)

   lev_1  lev_2  lev_2_&_lev_1
0      1      0              0
1      0      0              0
2      1      0              0
3      1      1              1
4      1      0              0

说明

  • df['lev_2'].eq(1):检查当前行是否等于1
  • df['lev_1'].shift().eq(1):检查上一行是否等于1
  • np.where(condition, 1, 0):如果条件为True,则返回1,否则返回0