python - 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'])
解决方案
看起来您的映射中有一些不匹配,但是您可以使用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'])
希望这能给你一些想法。
推荐阅读
- excel - VBA(Excel)平均更精确,工作表函数或逐步
- azure - 无法获取 Azure Oauth2 令牌
- c++ - Clang 拒绝编译 libstdc++ 的
标题 - laravel - 我有这个错误 SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where 子句'
- c# - 无法将类型“F_M.Commitment_Ledger_Data__Public_Type”隐式转换为“F_M.Commitment_Ledger_Data__Public_Type[]”
- asp.net-mvc - 在 ASP.NET Core MVC 中记录访问者会话
- javascript - 从日期数组中减去 1 个月
- cqrs - Command Dispatcher 和 Mediator 设计模式有什么区别?
- java - Spring项目-在jsp页面中显示mysql表数据
- django - 如何配置 django_plotly_dash 以从自定义 url 提供资产