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

如何按时间顺序合并不同时间维度、不同大小的DataFrame?

Pandas合并两个含不同时间的DataFrame并按时间排序

你的问题出在没有指定合并键且未对结果排序。直接用how='outer'但不指定on参数时,Pandas虽然会基于共同列做外连接,但不会自动按你需要的run_id+time顺序排列,导致结果是原DataFrame的行堆叠。

正确实现步骤

  1. 基于run_id和time两个列做外连接,保留所有行和列,无匹配的位置填充NaN;
  2. 按run_id分组,再按time升序排序,得到你要的时间顺序结果。

完整代码

import pandas as pd

# 构造示例数据(替换成你自己的DataFrame即可)
df1 = pd.DataFrame({
    'time': [0,24,48,0,24,48],
    'run_id': ['H1','H1','H1','H2','H2','H2'],
    'weight': [500,400,300,900,800,700]
})

df2 = pd.DataFrame({
    'time': [0.5,10,40,60,0.5,5,35,70],
    'run_id': ['H1','H1','H1','H1','H2','H2','H2','H2'],
    'totalizer': [100,200,300,400,900,1000,1100,1200]
})

# 外连接+排序
merged_df = pd.merge(df1, df2, on=['run_id', 'time'], how='outer')
merged_df = merged_df.sort_values(by=['run_id', 'time']).reset_index(drop=True)

# 可选:将NaN转为空字符串(匹配你期望的显示效果)
merged_df = merged_df.fillna('')

print(merged_df)

输出结果

timerun_idweighttotalizer
00H1500
10.5H1100
210H1200
324H1400
440H1300
548H1300
660H1400
70H2900
80.5H2900
95H21000
1024H2800
1135H21100
1248H2700
1370H21200

关键说明

  • pd.merge的on=['run_id', 'time']确保同一run_id下的同一时间行会合并,不同时间的行各自保留;
  • sort_values(by=['run_id', 'time'])先按实验分组(H1/H2),再按时间从小到大排序,完全匹配你的需求;
  • 若不需要NaN,可以用fillna('')转为空字符串,贴合你给出的期望格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:20:22