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

使用Pandas按索引合并DataFrame后结果为空的原因

Pandas merge结果为空的原因及解决办法

问题重现

执行以下代码合并两个DataFrame后结果为空:

import pandas as pd
merger = pd.merge(COMMODITY, df_new, left_index=True, right_index=True)

数据详情

COMMODITY结构及数据:

date        value   date_id
date                                     
2023-04-04 2023-04-04  1523.50 2023-04-04
2023-04-04 2023-04-04  1521.25 2023-04-04

df_new结构及数据:

date       Pos_Neg    COMAN                          
2021-03-05  0.131192  0.131192
2021-03-18  0.291161  0.291161
2021-03-31 -1.042225 -1.042225

核心原因

  1. 索引无重叠交集:COMMODITY的索引是2023-04-04,而df_new的索引都是2021年的日期,两者完全没有共同的索引值。
  2. merge默认逻辑是inner join:pd.merge默认使用内连接,只有两边键值完全匹配的行才会被保留。因为两个DataFrame的索引没有任何交集,所以合并后自然为空。

解决方案

1. 按date列而非索引合并(如果业务逻辑是匹配日期列)

如果你的目标是通过date列匹配数据,而不是索引,修改代码为:

merger = pd.merge(COMMODITY, df_new, on='date')

注意:当前两份数据的date列也没有重叠值,所以执行后结果仍为空,需要确保数据中有相同的日期值才会得到匹配结果。

2. 使用外连接保留所有数据

如果需要保留两个DataFrame的所有行,无匹配的字段用NaN填充,使用how='outer'参数:

merger = pd.merge(COMMODITY, df_new, left_index=True, right_index=True, how='outer')

关于COMMODITY中date重复的说明

COMMODITY里出现重复的date(包括索引和列),大概率是原始数据中存在多条同一天的记录(比如同一日期不同批次/时段的商品数据),或者上游代码在生成数据时重复写入了。
如果需要处理重复数据,可以选择:

  • 直接去重:
    COMMODITY_unique = COMMODITY.drop_duplicates()
    
  • 按日期聚合(比如取value的平均值):
    COMMODITY_agg = COMMODITY.groupby('date').agg({'value': 'mean', 'date_id': 'first'}).reset_index()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:53:31