如何根据数据帧中的条件更改行的值?

时间:2019-09-23 10:17:33

标签: python pandas dataframe

我的数据框如下所示,

    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 

(需要做一些魔术)

应在类型列中进行更改,使得如果label0并且type0,则连续一行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 

2 个答案:

答案 0 :(得分:1)

使用.eq()屏蔽具有typelabel列值为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