如何根据熊猫中另一列的值来填充一列的缺失值?

问题描述 投票:0回答:2

我有一个如下所示的数据框:

import numpy as np
import pandas as pd
d = {'col1': [np.nan, 19, 32, np.nan, 54, 67], 'col2': [0, 1, 0, 1, 1, 1]}
df = pd.DataFrame(d)

我想基于“ col2”的值填写“ col1”中的缺失值。具体来说:如果“ col2”为0,我想用0填充“ col1”中的缺失值,否则将“ col1”保持原样。在这种情况下,我的输出应如下所示:

d_updated = {'col1': [0, 19, 32, np.nan, 54, 67], 'col2': [0, 1, 0, 1, 1, 1]}
df_updated = pd.DataFrame(d_updated)

要获得上面的输出,我尝试获取“ col2”的值等于0的索引,并使用fillna():

ix = list(df[df["col2"] == 0].index)
df["col2"].loc[ix].fillna(0, inplace = True)

但是,我的方法行不通,我也不知道为什么。谢谢你。

python pandas dataframe data-cleaning fillna
2个回答
1
投票

[尝试使用loc和布尔索引:

df.loc[(df['col1'].isna()) & (df['col2'] == 0), 'col1'] = df['col2']

输出:

   col1  col2
0   0.0     0
1  19.0     1
2  32.0     0
3   NaN     1
4  54.0     1
5  67.0     1

0
投票
m=(df.col2==0 )&(df.col1.isna())#boolean select using loc

那么下列任何一项都可以做

df.loc[m,'col1']=df.loc[m,'col1'].fillna(0, inplace=True)

or
df.loc[m,'col1'] = df.loc[m,'col1'].replace('nan', np.nan).fillna(0)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.