使用pandas outer外连接合并数据时如何避免丢失应用数据?
问题原因
你出现数据丢失的核心原因有两个:
- 关联键逻辑冗余且存在匹配风险:你将
app_name加入了合并关联键,但app_id本身已经是应用的唯一标识,不需要额外用字符串类型的app_name做匹配,一旦两边app_name存在前后空格、字符拼写差异就会导致匹配失败,从你给出的示例数据看,df_active_users中「food delivery app」的字段值就存在多余空格的可能性。 - 字段选择不匹配:你在提取
df_download的字段时没有包含app_name,如果坚持用app_name做关联键,右表缺失对应字段会导致匹配逻辑异常。
解决方法
直接使用业务上唯一的date+app_id作为合并关联键即可,不需要加入app_name,即可完整保留两边所有数据:
df_merged = pd.merge( df_active_users[['date', 'active_users', 'app_id', 'app_name']], df_download[['date', 'downloads', 'app_id']], on=['date', 'app_id'], how='outer' )
如果需要校验两边app_name的一致性,可以用如下代码排查:
# 提取两个表的app_id和app_name映射关系 active_app_map = df_active_users[['app_id', 'app_name']].drop_duplicates() download_app_map = df_download[['app_id', 'app_name']].drop_duplicates() # 输出不一致的记录 check_df = pd.merge(active_app_map, download_app_map, on='app_id', how='outer', indicator=True) print(check_df[check_df['_merge'] != 'both'])
如果存在不一致的情况,选择其中一个表的app_name作为标准保留即可。
内容的提问来源于stack exchange,提问作者Marcos Dias
相关产品推荐
相关产品推荐

