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

如何让pd.concat基于DatetimeIndex列正确合并两个Pandas DataFrames?

解决Pandas基于DatetimeIndex合并DataFrames的问题

你的问题出在未将日期列设置为DataFrame的索引,pd.concat默认按整数位置索引(0、1、2...)对齐,而非日期值,所以才会出现日期偏移、重复日期列的情况。以下是两种正确的解决方法:

方法一:设置DatetimeIndex后用pd.concat

先将两个DataFrame的dtm列转为DatetimeIndex,再基于索引进行内连接拼接:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(data=pd.date_range('2022-01-02','2022-01-04'), columns=['dtm'])
df1['var1'] = np.random.random(len(df1))
# 将dtm设为DatetimeIndex
df1 = df1.set_index('dtm')

df2 = pd.DataFrame(data=pd.date_range('2022-01-01','2022-01-05'), columns=['dtm'])
df2['var2'] = np.random.random(len(df2))*100
df2 = df2.set_index('dtm')

# 按索引内连接拼接
result = pd.concat([df1, df2], axis=1, join='inner')
# 可选:将索引转回列
result = result.reset_index()
print(result)

输出示例:

dtm      var1       var2
0 2022-01-02  0.942075  62.548033
1 2022-01-03  0.857628   3.883448
2 2022-01-04  0.432774  45.123456

方法二:直接使用pd.merge(更直观)

即使dtm是datetime类型,pd.merge依然可以正常按列匹配,不需要转索引:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(data=pd.date_range('2022-01-02','2022-01-04'), columns=['dtm'])
df1['var1'] = np.random.random(len(df1))

df2 = pd.DataFrame(data=pd.date_range('2022-01-01','2022-01-05'), columns=['dtm'])
df2['var2'] = np.random.random(len(df2))*100

# 按dtm列内连接合并
result = pd.merge(df1, df2, on='dtm', how='inner')
print(result)

该方法直接指定合并键为dtm,内连接会自动保留两个DataFrame共有的日期,且仅保留一个dtm列,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:45:30