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

Pandas中匹配Date列DataFrame以实现连接/合并的问题

解决Pandas中不同格式日期的合并与求和问题

我来帮你一步步搞定这个需求,核心思路是先把两个表的日期统一成标准格式,再按日期匹配合并,最后完成数据求和,具体操作如下:

1. 读取CSV并统一日期格式

首先我们需要把两个CSV文件读入Pandas,然后重点处理第一个CSV的缩写年份,将所有日期转为标准的datetime类型(这样合并时不会出现字符串匹配的误差):

import pandas as pd

# 读取两个CSV文件
df1 = pd.read_csv("csv1.csv")  # 日期格式为 Aug-12(缩写年份)
df2 = pd.read_csv("csv2.csv")  # 日期包含完整年份对应数据

# 转换csv1的日期列:指定格式为「月份缩写-两位年份」
# %b 代表英文月份缩写(如Aug),%y代表两位年份(如12),Pandas会自动识别为2012
df1["Date"] = pd.to_datetime(df1["Date"], format="%b-%y")

# 转换csv2的日期列:如果是Aug-2012格式,直接用pd.to_datetime即可自动识别
df2["Date"] = pd.to_datetime(df2["Date"])

2. 按日期合并两个DataFrame

接下来我们用merge方法按Date列合并两个表,因为你提到csv2只有41行对应数据,所以用**内连接(inner join)**可以只保留两个表都匹配的日期行:

# 内连接合并,用suffixes区分两个表的同名列
merged_df = pd.merge(
    df1, 
    df2, 
    on="Date", 
    how="inner", 
    suffixes=("_from_csv1", "_from_csv2")
)

3. 对匹配的数据求和合并

假设你需要对两个表的数值列(比如Value、Amount这类)求和,我们可以直接对对应列做加法:

# 示例:对单个数值列求和,替换成你实际的列名
merged_df["Total_Value"] = merged_df["Value_from_csv1"] + merged_df["Value_from_csv2"]

# 如果有多个数值列需要批量求和,可以这样处理
# 先筛选出两个表中的数值列(排除Date列)
num_cols_csv1 = [col for col in df1.columns if col != "Date"]
num_cols_csv2 = [col for col in df2.columns if col != "Date"]

# 遍历对应列并求和
for col1, col2 in zip(num_cols_csv1, num_cols_csv2):
    merged_df[f"Total_{col1}"] = merged_df[col1] + merged_df[col2]

4. 输出目标格式的结果

最后把日期列转换成你需要的mm-yyyy(比如Aug-2012)格式,然后保存为CSV:

# 将datetime类型的Date列转为目标字符串格式
merged_df["Date"] = merged_df["Date"].dt.strftime("%b-%Y")

# 保存结果到新CSV,不保留索引列
merged_df.to_csv("merged_result.csv", index=False)

注意事项

  • 如果你的月份缩写是中文(比如「8月-12」),需要先设置Pandas的本地化环境,或者指定对应的format格式适配中文月份。
  • 对于两位年份的识别,Pandas默认将00-69识别为2000-2069,70-99识别为1970-1999,你的数据是2012-2016,完全符合这个规则,不需要额外调整。

内容的提问来源于stack exchange,提问作者HP-Nunes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:10:37