如何基于datetime索引与指定列合并Pandas DataFrame
合并实现方法
核心逻辑说明:
- 两个df的列虽然物理顺序不同,但每个值是严格绑定对应列名的,必须按列名匹配值,不能按列的物理位置硬套df1的列顺序,否则会把df2的A、B值完全颠倒
- 按datetime索引取两个df的日期并集,对重叠日期的重复行做去重,最终按日期排序、调整列顺序即可得到目标结果
具体实现代码
- 统一转换索引为datetime格式,避免对齐错位:
import pandas as pd # 将两个数据帧的索引转换为标准日期格式 df1.index = pd.to_datetime(df1.index) df2.index = pd.to_datetime(df2.index)
- 按列名自动对齐做外连接拼接:
# 按索引做外连接拼接,pandas会自动匹配列名对齐不同顺序的列 combined = pd.concat([df1, df2], join="outer")
- 去除重叠日期产生的重复行(两个df在重叠日期的记录值完全一致,去重不影响结果):
combined = combined.drop_duplicates(keep="first")
- 按日期升序排序,调整列顺序为A、B,得到最终结果:
df = combined.sort_index()[["A", "B"]]
结果匹配验证
- 仅存在于df2的日期会严格按列名取值:比如01-05-2021,df2中B列值为11、A列值为0,对应最终结果A=0、B=11;01-06-2021df2中B列值为2、A列值为9,对应最终结果A=9、B=2,完全符合预期
- 两个df重叠的日期记录值完全一致,去重后无重复索引、无值错位
注意:不要在处理时直接按列位置强行修改df2的列名,比如写
df2.columns = ["A", "B"]这类操作,会直接把df2的A、B值颠倒,和预期结果不符。
内容的提问来源于stack exchange,提问作者Tobitor
相关产品推荐
相关产品推荐

