import pandas as pd
df = pd.DataFrame({"First_Column": [-2,-1,1,2,3]})
df['Second_Column']='Good'
df.loc[:, 'Second_Column']=df[df.First_Column>0]['Second_Column'].apply(lambda x: 'Bad')
运行此命令时,我在Bad
中得到NaN
和Second_Column
,而不是Good
和Bad
。为什么apply()
用NaN
覆盖不符合条件的值?
答案 0 :(得分:1)
通过使用mask
df.Second_Column=df.Second_Column.mask(df.First_Column>0,'Bad')
df
Out[441]:
First_Column Second_Column
0 -2 Good
1 -1 Good
2 1 Bad
3 2 Bad
4 3 Bad
或
df.loc[df.First_Column>0,'Second_Column']='Bad'
df
Out[443]:
First_Column Second_Column
0 -2 Good
1 -1 Good
2 1 Bad
3 2 Bad
4 3 Bad
或者更简单地使用np.where
df['Second_Column']=np.where(df.First_Column>0,'Bad','Good')
df
Out[445]:
First_Column Second_Column
0 -2 Good
1 -1 Good
2 1 Bad
3 2 Bad
4 3 Bad