如何根据 Pandas 中另一列的值来填充一列缺失值?
How to fill one column's missing values conditioning on another column's value in Pandas?
我的数据框如下所示:
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)
但是,我的方法不起作用,我也不知道为什么。先谢谢了。
尝试使用 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
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)
我的数据框如下所示:
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)
但是,我的方法不起作用,我也不知道为什么。先谢谢了。
尝试使用 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
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)