在另一列中基于nan替换pandas列中的值

时间:2017-05-23 12:55:42

标签: python-3.x pandas

对于列对,如果第一列中的值为nan,我想用nan替换第二列的值。 我试过没有成功

>import pandas as pd
> 
> df=pd.DataFrame({'a': ['r', np.nan, np.nan, 's'], 'b':[0.5, 0.5, 0.2,
> 0.02],  'c':['n','r', np.nan, 's' ], 'd':[1,0.5,0.2,0.05]})
> 
>listA=['a','c']

>listB=['b','d']

>for color, ratio in zip(listA, listB):

>>df.loc[df[color].isnull(), ratio] == np.nan

df保持不变

使用def(失败)的其他测试

>def Test(df):
>> if df[color]== np.nan:
>> >> return df[ratio]== np.nan
>> else:
>> >>return



>for color, ratio in zip(listA, listB):
>>>>df[ratio]=df.apply(Test, axis=1)

由于

1 个答案:

答案 0 :(得分:1)

您似乎有拼写错误,将==更改为=

for color, ratio in zip(listA, listB):
    df.loc[df[color].isnull(), ratio] = np.nan
print (df)
     a     b    c     d
0    r  0.50    n  1.00
1  NaN   NaN    r  0.50
2  NaN   NaN  NaN   NaN
3    s  0.02    s  0.05

mask的另一个解决方案,默认情况下将掩码的True值替换为NaN

for color, ratio in zip(listA, listB):
    df[ratio] = df[ratio].mask(df[color].isnull())
print (df)
     a     b    c     d
0    r  0.50    n  1.00
1  NaN   NaN    r  0.50
2  NaN   NaN  NaN   NaN
3    s  0.02    s  0.05
相关问题