不同长度DataFrame的内连接合并问题求助
解决DataFrame合并问题:保留小表所有数据并匹配大表记录
嗨,我来帮你搞定这个合并需求~首先得明确:你想要的其实是左连接(Left Join),而不是内连接哦!内连接只会保留两张表中都存在的beer_name记录,但你需要保留threshold_shaped里的所有数据,左连接正好能满足这个要求。
核心思路
- 把
threshold_shaped作为左表(611行,beer_name唯一),确保它的每一行都被保留 - 把
beer作为右表(1586k行,beer_name不唯一),将匹配到的brewery_name关联到左表对应行 - 左连接后,左表的所有行都会保留,右表中没有匹配的部分会用
NaN填充
具体代码实现
用Pandas的merge函数就能轻松搞定,而且为了提升效率,建议只选取右表中需要的列(避免加载不必要的数据):
import pandas as pd # 执行左连接合并 merged_df = pd.merge( left=threshold_shaped, right=beer[["brewery_name", "beer_name"]], # 只取需要的两列,节省内存和运行时间 on="beer_name", how="left" )
关键说明
- 行数变化说明:因为
beer里的beer_name不唯一,合并后merged_df的行数会大于等于611——左表的每一行会对应右表中所有匹配的beer_name记录,这是完全正常的结果。 - 缺失值处理:如果
threshold_shaped里的某个beer_name在beer中找不到匹配,对应的brewery_name列会显示NaN,你可以根据后续需求处理这些缺失值(比如填充默认名称)。 - 性能优化提示:由于
beer的行数非常大,只选取需要的列进行合并能显著减少内存占用和运行时间,这一步很实用哦!
内容的提问来源于stack exchange,提问作者SrihariRaghu
相关产品推荐
相关产品推荐

