如何优雅合并Pandas中不同大小的DataFrame?无需冗余循环
用Pandas Merge优雅合并DataFrame
直接用Pandas内置的merge()方法就能实现需求,完全不需要编写冗余循环,这是处理这类键值匹配场景的标准高效方案。
步骤示例
- 先构造模拟数据(贴合你的场景):
import pandas as pd # 包含week_of_year列的主DataFrame df_main = pd.DataFrame({ 'week_of_year': [12, 12, 13, 13, 14, 12], 'other_column': ['x', 'y', 'z', 'a', 'b', 'c'] }) # 记录各周最大值的小DataFrame df_week_max = pd.DataFrame({ 'week_of_year': [12, 13, 14], 'max_value': [34, 45, 29] })
- 执行合并操作,以
week_of_year作为匹配键:
# 左连接保留主DataFrame的所有行,自动匹配对应周的最大值 merged_df = df_main.merge(df_week_max, on='week_of_year', how='left')
合并后的结果会自动将主DataFrame中所有week_of_year为12的行填充max_value=34,以此类推:
| week_of_year | other_column | max_value |
|---|---|---|
| 12 | x | 34 |
| 12 | y | 34 |
| 13 | z | 45 |
| 13 | a | 45 |
| 14 | b | 29 |
| 12 | c | 34 |
补充说明
how='left'确保主DataFrame的所有行都被保留,若某周在小DataFrame中无对应值,max_value会填充为NaN- 如果两个DataFrame的周列名称不同,可通过
left_on和right_on分别指定,比如:merge(df_main, df_week_max, left_on='week_of_year', right_on='week_num', how='left') - 这种方法的执行效率远高于循环,Pandas内部做了向量优化,适合处理大体积数据
内容的提问来源于stack exchange,提问作者Gianni Spear
相关产品推荐
相关产品推荐

