Python dataframe:如果其他列满足,则在某些行中填充文本

Python dataframe: fill text in certain rows if other columns satisfied

我有两列。我想根据第一列中的值在第二列中填充文本。

这是我的代码:

df = pd.DataFrame({'value':[100,10,-5,2],'text':['fine','good',np.nan,np.nan]})
df['text'] = np.where(df['value']<5,'bad')

当前输出:

ValueError: either both or neither of x and y should be given

预期输出:

df = 

   value  text
0    100  fine
1     10  good
2     -5   bad
3      2   bad

我的代码有什么问题?

更新:下面给出的三个答案的时间安排,numpy 胜出。这是我原来的 df 包含 25 万行:

%timeit df['text'] = np.where(df['value']<5,'bad',df['text'])
18.2 ms ± 1.4 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit df.loc[df['value']<5,'text'] = 'bad'
31.3 ms ± 4.1 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit df['text'] = df['text'].mask(df['value']<5, 'bad')
22.8 ms ± 602 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

如错误消息所述,如果条件不成立,您应该提供 np.where 应映射到的第二个值:

df['text'] = np.where(df['value']<5, 'bad', df['text'])

这输出:

   value  text
0    100  fine
1     10  good
2     -5   bad
3      2   bad

您需要设置您的条件的另一部分:

df['text'] = np.where(df['value'] < 5, 'bad', df['text'])
print(df)

# Output
   value  text
0    100  fine
1     10  good
2     -5   bad
3      2   bad

分配回来

df.loc[df['value']<5, 'text'] = 'bad'
df
Out[67]: 
   value  text
0    100  fine
1     10  good
2     -5   bad
3      2   bad

你可以试试Series.mask

df['text'] = df['text'].mask(df['value'] < 5, 'bad')
print(df)

   value  text
0    100  fine
1     10  good
2     -5   bad
3      2   bad