我有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非常大。
谢谢!
答案 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