合并按年/月/日/小时整数列存储日期的两个不等日期DataFrame
合并拆分日期列存储的不等范围DataFrame方案
你使用内连接的逻辑本身是符合需求的,出现hour列重复的问题,核心原因通常是原始DataFrame的连接键存在重复行,按以下步骤处理即可得到预期结果:
1. 问题原因
两个DataFrame执行多键合并时,只要任意一方的连接键['site','year','month','day','hour']存在重复值,就会出现一对多/多对多匹配,最终结果行就会膨胀,出现重复的hour值。
2. 解决代码
预处理+合并完整代码
# 定义连接键 join_cols = ['site', 'year', 'month', 'day', 'hour'] # 统一日期相关列的类型为整数,避免字符串和整数不匹配的问题 for col in join_cols[1:]: df1[col] = df1[col].astype(int) df2[col] = df2[col].astype(int) # 对两个DataFrame按连接键去重,保留每个键的第一条记录(可根据业务需求调整keep参数为'last'等) df1_distinct = df1.drop_duplicates(subset=join_cols, keep='first') df2_distinct = df2.drop_duplicates(subset=join_cols, keep='first') # 执行内连接 df3 = df1_distinct.merge(df2_distinct, on=join_cols, how='inner')
执行后得到的df3就和你预期的结果完全一致。
3. 额外排查项
如果处理后仍未得到预期结果,可检查site列是否存在隐藏空格:
df1['site'] = df1['site'].str.strip() df2['site'] = df2['site'].str.strip()
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

