首页 > 解决方案 > Python / Pandas - 在使用多列合并期间将“空字符串”视为匹配项

问题描述

我正在尝试在多列上合并 2 个数据框:['Unit','Geo','Region']. 并且,条件是:当 from 的值在right_df上遇到“空字符串”时left_df,它应该被视为匹配。

例如,当第一行right_df与 的第一行连接时left_df,我们有一个空字符串作为 column: 'Region'。因此,需要将空字符串视为匹配'AU'并得到最终结果'DE'。

left_df = pd.DataFrame({'Unit':['DEV','DEV','DEV','DEV','DEV','TEST1','TEST2','ACCTEST1','ACCTEST1','ACCTEST1'],
                    'Geo':['AP','JAPAN','NA','Europe','Europe','','','AP','Europe','NA'],
                    'Region':['','','','France','BENELUX','','','','',''],
                    'Resp':['DE','FG','BO','MD','KR','PM','NJ','JI','HN','FG']})


right_df = pd.DataFrame({'Unit':['DEV','DEV','DEV','DEV','TEST1','TEST2','ACCTEST1','DEV','ACCTEST1','TEST1','TEST2','DEV','TEST1','TEST2'],
                    'Geo':['AP','JAPAN','AP','NA','AP','Europe','Europe','Europe','AP','JAPAN','AP','Europe','Europe','Europe'],
                    'Region':['AU','JAPAN','ISA','USA','AU/NZ','France','CEE','France','ISA','JAPAN','ISA','BENELUX','CEE','CEE']})    

在此处输入图像描述

我尝试使用下面的代码,但它仅在“空字符串”具有值时才有效。我正在努力添加一个条件,即“将空字符串视为匹配”或“如果right_df遇到空字符串则忽略并继续可用匹配”。将不胜感激任何帮助。谢谢!!

result_df = pd.merge(left_df, right_df, how='inner', on=['Unit','Geo','Region'])

标签: pythonpandasdataframejoinmerge

解决方案


看起来您的映射中有一些不匹配,但是您可以使用update方法来处理空字符串:

# replace empty strings with nan
left_df = left_df.replace('', np.nan)

# replace np.nan with values from other dataframe
left_df.update(right_df, overwrite=False)

# merge
df = pd.merge(left_df, right_df, how='right', on=['Unit','Geo','Region'])

希望这能给你一些想法。


推荐阅读