我的数据框如下所示,
type label
0 0 0
1 0 0
2 0 0
3 0 0
4 2 1
5 2 1
6 2 1
7 2 1
8 2 1
9 2 1
10 0 0
11 0 0
12 0 0
13 0 0
14 0 0
15 0 0
16 0 0
17 0 0
18 0 0
19 0 0
(需要做一些魔术)
应在类型列中进行更改,使得如果label
为0
并且type
为0
,则连续一行type
应该分配给2
。
完整的数据框应如下所示:
type label
0 0 0
1 2 0
2 2 0
3 0 0
4 2 1
5 2 1
6 2 1
7 2 1
8 2 1
9 2 1
10 0 0
11 2 0
12 2 0
13 2 0
14 2 0
15 2 0
16 2 0
17 2 0
18 2 0
19 2 0
答案 0 :(得分:1)
使用.eq()
屏蔽具有type
和label
列值为0的行,并使用.shift()
用可选的时间频率将索引移位所需的周期数。< / p>
例如。
m = df['type'].eq(0) & df['label'].eq(0)
df.loc[m == m.shift(1),'type'] = 2
print(df)
O / P:
type label
0 0 0
1 2 0
2 2 0
3 2 0
4 2 1
5 2 1
6 2 1
7 2 1
8 2 1
9 2 1
10 0 0
11 2 0
12 2 0
13 2 0
14 2 0
15 2 0
16 2 0
17 2 0
18 2 0
19 2 0
答案 1 :(得分:0)
类似的方法
df['Condition']=(df==0).all(axis=1)
df['Condition']=df['Condition'].shift(periods=1).fillna(False)
df['Type'] = np.where(df['Condition'], 2, df['Type'])
Type label Condition
0 0 0 False
1 2 0 True
2 2 0 True
3 2 0 True
4 2 1 True
5 2 1 False
6 2 1 False
7 2 1 False
8 2 1 False
9 2 1 False
10 0 0 False
11 2 0 True
12 2 0 True
13 2 0 True
14 2 0 True
15 2 0 True
16 2 0 True
17 2 0 True
18 2 0 True
19 2 0 True