You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于年月关联合并两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:27:16