【发布时间】:2020-02-12 13:10:47
【问题描述】:
我有两个时间序列,它们有重叠的事件,但它们也有另一个不包含的不同事件。重叠事件的时间戳很接近,但不能保证相等。
我想合并这两个数据集,以在事件重叠时取两个 max_val 列中的最大值,并将合并集中的不同事件与它们最初设置的 max_val 保持一致。
我玩过各种 merge_asof、groupby 组合,但我是 python 新手,努力获得任何按预期工作的东西,或多或少是可读和直观的。
注意:示例数据使用整数作为时间戳,以便于设置,但实际数据是真实的时间戳,应该等效于 merge_asof(direction="nearest", tolerance="10ms")。 不过,我看不到如何将merge_asof 作为完整的外部联接。据我所知,似乎只提供左连接。
import pandas
df1 = pandas.DataFrame([[1.002,18],[2,22],[3,77],[5,23]], columns=["timestamp", "max_val"])
df2 = pandas.DataFrame([[1,33],[2,12],[3.001,87],[4,54]], columns=["timestamp", "max_val"])
merged_df = pandas.merge_asof(df1,df2, on="timestamp")
print(df1)
print(df2)
print(merged_df)
输出:
timestamp max_val
0 1.002 18
1 2.000 22
2 3.000 77
3 5.000 23
timestamp max_val
0 1.000 33
1 2.000 12
2 3.001 87
3 4.000 54
timestamp max_val_x max_val_y
0 1.002 18 33
1 2.000 22 12
2 3.000 77 12
3 5.000 23 54
期望的结果:(不关心合并时哪个时间戳仍然存在)
timestamp max_val
0 1.002 33
1 2.000 22
2 3.000 87
3 4.000 54
4 5.000 23
【问题讨论】:
-
您应该使用
df1和1,2.01,3.1, 5时间戳来更新您的数据。 -
是的,感谢您对答案的初步了解,@QuangHoang。我没有意识到它会像将整数设置为浮点数以复制我更复杂的时间戳一样简单。我会这样做的。
-
我从模糊的 “在最近的索引上合并 ...” “在数字上最近的索引上合并 ...” 编辑了您的标题。。跨度>
标签: python pandas dataframe merge time-series