【问题标题】:How to combine two pandas Dataframes with different timestamp densities?如何组合两个具有不同时间戳密度的熊猫数据框?
【发布时间】:2026-01-30 22:35:02
【问题描述】:

我有几个熊猫数据框df1,df2,df3... 每个都包含时间戳列和各自值的列。例如:

df1:

2015-01-01T15:41:10.500Z, 9239.337890625
2015-01-01T15:41:50.543Z, 9539.337890625
2015-01-01T15:42:30.600Z, 8957.0458984375
2015-01-01T15:43:00.606Z, 8237.0458984375

df2:

2015-01-01T01:41:43.900Z, 67.58499908447266
2015-01-01T01:42:43.918Z, 67.58499908447266
2015-01-01T02:43:37.800Z, 67.58200073242189
2015-01-01T02:44:37.825Z, 67.58200073242189

我不确定我是否正确地用文字表达了这些,所以我需要将这些数据文件组合成一个,其中只有一个时间戳列,其他列将包含测量值。我正在考虑采用最小增量的时间戳并将其他行插入各自位置的方法。对于包含一个测量值但不包含另一个测量值的时间戳值,它将放置 Nan 或保持为空。 预期的输出将是这样的:

timestamp                 value1             value2 ...
2015-01-01T15:41:10.500Z, 9239.337890625 
2015-01-01T01:41:43.900Z,                    67.58499908447266
2015-01-01T15:41:50.543Z, 9539.337890625
2015-01-01T15:42:30.600Z, 8957.0458984375
2015-01-01T01:42:43.918Z,                    67.58499908447266
2015-01-01T15:43:00.606Z, 8237.0458984375

那么我该怎么做呢?任何建议或 cmets 都非常感谢。

【问题讨论】:

  • 所有的时间戳都不同吗?
  • 你可以添加一个输出示例吗?
  • HS-nebula,Timestamps都是2015-2016区间,但数值不同。
  • Lucas Araújo,还没写代码,不知道必要的语法和用什么
  • 我认为@LucasAraújo 的意思是你能告诉我们你期望的输出是什么样子吗?

标签: python pandas dataframe timestamp


【解决方案1】:

如果时间戳是它们自己的列,

                    timestamp            value1
0    2015-01-01T15:41:10.500Z    9239.337890625
1    2015-01-01T15:41:50.543Z    9539.337890625
2    2015-01-01T15:42:30.600Z    8957.0458984375
3    2015-01-01T15:43:00.606Z    8237.0458984375

使用

df_all = pd.concat([df1, df2, df3, ...], ignore_index = True)
df_all.sort_values(by='timestamp', inplace = True)

ignore_index=True 告诉pandas 忘记原始数据帧中的索引,并根据新数据帧中的顺序创建新索引。

如果时间戳是索引,

                                     value1
2015-01-01T15:41:10.500Z    9239.337890625
2015-01-01T15:41:50.543Z    9539.337890625
2015-01-01T15:42:30.600Z    8957.0458984375
2015-01-01T15:43:00.606Z    8237.0458984375

使用

df_all = pd.concat([df1, df2, df3, ...])
df_all.sort_index(inplace = True)

sort_valuessort_index 将按时间顺序排列时间戳。

【讨论】:

  • HS-nebula,非常感谢您的解决方案,它可以满足我的要求,但结果包含以下值:value1 value2 timestamp 133 9587.165039 NaN 2015-01-18T00:00:00.000Z 0 NaN 0.14 2015-01-18T00:00:00.000Z,它们具有相同的时间戳。如何连接这些行,使它们成为:value1 value2 timestamp 9587.165039 0.14 2015-01-18T00:00:00.000Z
  • 我想我明白你在问什么,但你能通过格式化你想要更好的东西来更好地澄清它吗?听起来您毕竟确实有重复的 timestamp 值。另外,在用户名前使用@符号来通知他们。