我希望仅在满足条件时才填充特定列的缺失值。
e.g. A B
Nan 0
Nan 0
0 0
Nan 1
Nan 1
.....................
.....................
在上面的例子中,我想在B列中的相应值为0时填充A列中的Nan值.A(带Nan)中的其余值不应该改变。
答案 0 :(得分:1)
df['A'] = df['A'].mask(df['B'] == 0, df['A'].fillna(3))
loc
,numpy.where
的替代方案:
df.loc[df['B'] == 0, 'A'] = df['A'].fillna(3)
df['A'] = np.where(df['B'] == 0, df['A'].fillna(3), df['A'])
print (df)
A B
0 3.0 0
1 3.0 0
2 0.0 0
3 NaN 1
4 NaN 1
答案 1 :(得分:1)
np.where是快捷简单的解决方案。
In [47]: df['A'] = np.where(np.isnan(df['A']) & df['B'] == 0, 3, df['A'])
In [48]: df
Out[48]:
A B
0 3.0 0
1 3.0 0
2 3.0 0
3 NaN 1
4 NaN 1
答案 2 :(得分:0)
你应该对所有元素使用循环,如下所示:
for i in range(len(A))
if numpy.isnan(A[i]) && B[i] == 0:
A[i] = value
有更好的方法来实现这些循环,但我不知道你正在使用什么结构。