如何基于年月关联合并两个Pandas DataFrame?
基于年月合并两个DataFrame的解决方案
实现思路
核心是提取日期中的年月信息作为关联键,通过左连接将B列的值匹配到对应年月的所有A行中:
- 先将日期列转换为datetime类型,方便提取年月
- 生成统一的年月标识作为关联依据
- 以左连接保留所有A列的行,同时匹配对应年月的B值
完整代码
import pandas as pd # 初始化第一个DataFrame(含B列) df_b = pd.DataFrame({ 'Date': ['2021-12-31', '2022-01-31', '2022-02-28'], 'B': [pd.NA, 500, 540] }) df_b['Date'] = pd.to_datetime(df_b['Date']) # 初始化第二个DataFrame(含A列) df_a = pd.DataFrame({ 'Date': ['2021-12-28', '2021-12-31', '2022-01-20', '2022-01-31', '2022-02-15', '2022-02-25'], 'A': [520, 530, 515, 529, 544, 522] }) df_a['Date'] = pd.to_datetime(df_a['Date']) # 生成年月关联键(YYYY-MM格式的周期类型) df_b['year_month'] = df_b['Date'].dt.to_period('M') df_a['year_month'] = df_a['Date'].dt.to_period('M') # 左连接合并,仅保留需要的B列 merged_df = df_a.merge(df_b[['year_month', 'B']], on='year_month', how='left') # 清理辅助列并调整列顺序 final_result = merged_df.drop('year_month', axis=1)[['Date', 'A', 'B']] # 输出结果 print(final_result)
运行结果
Date A B 0 2021-12-28 520 <NA> 1 2021-12-31 530 <NA> 2 2022-01-20 515 500.0 3 2022-01-31 529 500.0 4 2022-02-15 544 540.0 5 2022-02-25 522 540.0
内容的提问来源于stack exchange,提问作者user3198755
相关产品推荐
相关产品推荐

