假设您有以下 df:
d = {'taxrate#1': [0.21, np.nan, np.nan], 'taxrate#2': [0.0, np.nan, np.nan]}
colstbf = pd.DataFrame(data=d)
colstbf
taxrate#1 taxrate#2
0 0.21 0.0
3 NaN NaN
5 NaN NaN
另一个df:
d = {'btw-percentage#1': [0.21, 0.21, 0], 'btw-percentage#2': [0.06, np.nan, 0.21]}
colsfilling = pd.DataFrame(data=d)
colsfilling
btw-percentage#1 btw-percentage#2
0 0.21 0.06
1 0.21 NaN
2 0.00 0.21
当 df 中的值为 NaN 时,我想用另一个 df 的其他值填充 df。
但是,由于税率项目可能很大(10 或更大,具体取决于文档),我想动态执行此操作。
所以我尝试了以下方法:
cols_to_check = []
cols_to_check = colstbf.filter(regex = 'taxrate').columns
colstbf['is_na'] = colstbf[cols_to_check].isnull().apply(lambda x: all(x), axis=1)
colstbf = np.where(df['is_na'] == True, colstbf, df['taxrate#1'])
与:
colsfinal = colstbf.fillna(colsfilling)
但是,上面的方法不起作用..
期望输出:
taxrate#1 taxrate#2
0 0.21 0.0
3 0.21 NaN
5 0.00 0.21
colstbf = df.filter(like='taxrate')
colsfilling = dfresult.filter(like='btw-percent').astype(float)
colsfilling = colsfilling/100
colsfilling.columns = colstbf.columns
colstbf.combine_first(colsfilling)
df = df.join(colstbf, lsuffix='_left')
df = df[df.columns.drop(list(df.filter(regex='_left')))]
df
请帮忙!
答案 0 :(得分:2)
您也可以通过设置 overwrite
参数来使用 pandas.DataFrame.update()
。
overwrite bool, default True 如何处理重叠键的非 NA 值:
colstbf.update(colsfilling.rename(columns=dict(zip(colsfilling.columns, colstbf.columns))), overwrite=False)
print(colstbf)
taxrate#1 taxrate#2
0 0.21 0.00
1 0.21 NaN
2 0.00 0.21
答案 1 :(得分:1)
您可以在此处使用 df.combine_first
。
colsfilling.columns = colstbf.columns
colstbf.combine_first(colsfilling)
taxrate#1 taxrate#2
0 0.21 0.00
1 0.21 NaN
2 0.00 0.21