如何基于年份合并两个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
相关产品推荐
相关产品推荐

