python - 通过排除 Pandas 中另一列中的特定值来填充一列

标签 python pandas

对于数据框 df ,我正在尝试填充列 b按值(value)2017-01-01如果列 a 中的值要么是空 NaNsOthers :

df = pd.DataFrame({'a':['Coffee','Muffin','Donut','Others',pd.np.nan, pd.np.nan]})
        a
0  Coffee
1  Muffin
2   Donut
3  Others
4     NaN
5     NaN

预期结果是这样的:

        a           b
0  Coffee  2017-01-01
1  Muffin  2017-01-01
2   Donut  2017-01-01
3  Others         NaN
4     NaN         NaN
5     NaN         NaN

我尝试过的方法并没有排除 NaNs :

df.loc[~df['a'].isin(['nan', 'Others']), 'b'] = '2017-01-01'

        a           b
0  Coffee  2017-01-01
1  Muffin  2017-01-01
2   Donut  2017-01-01
3  Others         NaN
4     NaN  2017-01-01
5     NaN  2017-01-01

谢谢!

最佳答案

使用np.nan代替nan:

df.loc[~df['a'].isin([np.nan, 'Others']), 'b'] = '2017-01-01'

或者在比较之前用其他替换缺失值:

df.loc[~df['a'].fillna('Others').eq('Others'), 'b'] = '2017-01-01'
print (df)
        a           b
0  Coffee  2017-01-01
1  Muffin  2017-01-01
2   Donut  2017-01-01
3  Others         NaN
4     NaN         NaN
5     NaN         NaN

关于python - 通过排除 Pandas 中另一列中的特定值来填充一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56580508/

相关文章:

python - 基类变量不存储派生类设置的值

python - Keras 检查输入 : expected input_4 to have shape (299, 299, 3) 时出错,但得到形状为 (64, 64, 3) 的数组

python - 我怎样才能缩短或清理这个Python代码?

python - pandas astype python bool 而不是 numpy.bool_

python - 我有两个数据框。我想根据条件用另一个数据帧的 header 值替换一个数据帧的值

python - 根据列使用函数满足的条件在 Pandas 中创建新列

regex - 如何使用选择性正则表达式在 Pandas 系列中执行替换?

python - 在 pandas 中应用 try/except 和 df.loc

python - 重新排列错位的列

python - Pandas:如何在groupby之后将值分配给组的第一行?