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

如何基于年份合并两个Pandas DataFrame以计算列相关性?

按年份合并Pandas DataFrame并计算相关性的正确方法

看起来你遇到的问题核心是两个DataFrame的合并键列名不匹配,加上一处变量名拼写小失误,导致了各种KeyError。我来帮你一步步解决:

第一步:确保日期列是datetime类型

首先要确认两个DataFrame的日期列已经被正确解析为datetime格式(如果还没做的话):

import pandas as pd

# 转换ur的DATE列为datetime
ur['DATE'] = pd.to_datetime(ur['DATE'])
# 转换atddf的yearID列为datetime
atddf['yearID'] = pd.to_datetime(atddf['yearID'])

第二步:提取年份作为共同合并键

因为你的DATE是年末日期(如1997-12-31),yearID是年初日期(如1997-01-01),它们属于同一年,所以我们可以从两个日期列中提取年份,生成一个统一的year列:

# 从ur的DATE列提取年份
ur['year'] = ur['DATE'].dt.year
# 从atddf的yearID列提取年份
atddf['year'] = atddf['yearID'].dt.year

第三步:按年份合并DataFrame

现在两个DataFrame都有了year列,就可以用这个共同键进行合并了:

# 这里用inner join确保只保留两边都存在的年份,你也可以根据需求换成left/right/outer
merged_df = pd.merge(ur, atddf, on='year', how='inner')

第四步:计算相关性

合并完成后,直接计算attendance和UNRATE的相关性即可:

# 计算皮尔逊相关系数(默认)
correlation = merged_df['attendance'].corr(merged_df['UNRATE'])
print(f"Attendance与UNRATE的相关性为: {correlation}")

为什么你之前的方法报错?

  • 前两种merge报错是因为你指定的合并键只存在于其中一个DataFrame中(ur没有yearID,atddf没有DATE);
  • 第三种方法的错误是变量名拼写错误:你写了urdf.assign(...),但你的DataFrame名叫ur,所以找不到DATE列,把urdf改成ur其实就能正常运行,不过提取单独的year列会更直观。

内容的提问来源于stack exchange,提问作者ChrisC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:03:12