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')
当我运行这个时,我在Second_Column
中得到Bad
和NaN
,而不是Good
和Bad
。为什么apply()
会用NaN
覆盖不符合条件的值?
使用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