如何合并两个不同的数据帧,时间戳略有不同
Posted
技术标签:
【中文标题】如何合并两个不同的数据帧,时间戳略有不同【英文标题】:How to merge two different dataframe with a slight difference in timestamp 【发布时间】:2019-11-19 21:03:03 【问题描述】:我从 10 秒的记录数据中计算出 15 分钟的移动平均值。现在我想根据最近的时间戳将来自不同文件的两个时间序列数据(15 分钟平均值和 15 分钟移动平均值)合并到一个新文件中。
15 分钟移动平均数据如下。正如我计算的移动平均线,前几行是 NaN:
RecTime NO2_RAW NO2 Ox_RAW Ox CO_RAW CO SO2_RAW SO2
2019-06-03 00:00:08 NaN NaN NaN NaN NaN NaN NaN NaN
2019-06-03 00:00:18 NaN NaN NaN NaN NaN NaN NaN NaN
2019-06-03 00:00:28 NaN NaN NaN NaN NaN NaN NaN NaN
2019-06-03 00:00:38 NaN NaN NaN NaN NaN NaN NaN NaN
15分钟平均数据如下图:
Site Species ReadingDateTime Value Units Provisional or Ratified
0 CR9 NO2 2019-03-06 00:00:00 8.2 ug m-3 P
1 CR9 NO2 2019-03-06 00:15:00 7.6 ug m-3 P
2 CR9 NO2 2019-03-06 00:30:00 5.9 ug m-3 P
3 CR9 NO2 2019-03-06 00:45:00 5.1 ug m-3 P
4 CR9 NO2 2019-03-06 01:00:00 5.2 ug m-3 P
我想要一张这样的桌子:
ReadingDateTime Value NO2_Raw NO2
2019-06-03 00:00:00
2019-06-03 00:15:00
2019-06-03 00:30:00
2019-06-03 00:45:00
2019-06-03 01:00:00
我试图将两个数据框与最近的时间进行匹配
df3 = pd.merge_asof(df1, df2, left_on = 'RecTime', right_on = 'ReadingDateTime', tolerance=pd.Timedelta('59s'), allow_exact_matches=False)
我有一个新的数据框
RecTime NO2_RAW NO2 Ox_RAW Ox CO_RAW CO SO2_RAW SO2 Site Species ReadingDateTime Value Units Provisional or Ratified
0 2019-06-03 00:14:58 1.271111 21.557111 65.188889 170.011111 152.944444 294.478000 -124.600000 -50.129444 NaN NaN NaT NaN NaN NaN
1 2019-06-03 00:15:08 1.294444 21.601778 65.161111 169.955667 152.844444 294.361556 -124.595556 -50.117556 NaN NaN NaT NaN NaN NaN
2 2019-06-03 00:15:18 1.318889 21.648556 65.104444 169.842556 152.750000 294.251556 -124.593333 -50.111667 NaN NaN NaT NaN NaN NaN
但是 df2 的值变成了 NaN。有人可以帮忙吗?
【问题讨论】:
您想如何合并它们?您的预期输出是什么? 我希望时间戳列类似于 15 分钟平均值,并添加来自 15 分钟移动平均值的 NO2_Raw 和 NO2 值以及基于类似时间戳的 15 分钟平均值的值。 编辑您的问题并添加预期的输出,以便我们可以直观地看到您尝试做什么 【参考方案1】:假设分钟是正确的,您可以删除秒,然后您就可以合并。
df.RecTime.map(lambda x: x.replace(second=0))
。
您可以创建一个新列或替换现有列进行合并。
【讨论】:
我试过这样做,但由于它是 10 秒的移动平均数据,因此它在一分钟内有多个数据。我应该如何完全匹配? 您可以使用辅助列在几分钟内进行合并,这样您就不会丢失原始时间戳。如果你想减少它,你可以使用 groupby。 你能告诉我具体怎么做吗? 您的问题是如何合并 2,因此您应该先阅读有关合并的文档。合并列需要是相同的数据类型 [pandas.pydata.org/pandas-docs/stable/reference/api/… Concat 与合并不同。 是的,我明白了。但是 ReadingDateTime 和 RecTime 都只是 datetime64[ns]。我是python新手,能帮我解决一下问题吗?以上是关于如何合并两个不同的数据帧,时间戳略有不同的主要内容,如果未能解决你的问题,请参考以下文章