如何将记录与汇总的历史数据合并?
Posted
技术标签:
【中文标题】如何将记录与汇总的历史数据合并?【英文标题】:How to merge records with aggregate historical data? 【发布时间】:2021-09-04 08:23:47 【问题描述】:我有一个包含个人记录的表格,另一个包含关于前者的个人历史信息的表格。
我想从第二个表中提取有关个人的信息。两个表都有时间戳。历史信息发生在第一个表中的记录之前,这一点非常重要。
Date_Time name
0 2021-09-06 10:46:00 Leg It Liam
1 2021-09-06 10:46:00 Hollyhill Island
2 2021-09-06 10:46:00 Shani El Bolsa
3 2021-09-06 10:46:00 Kilbride Fifi
4 2021-09-06 10:46:00 Go
2100 2021-10-06 11:05:00 Slaneyside Babs
2101 2021-10-06 11:05:00 Hillview Joe
2102 2021-10-06 11:05:00 Fairway Flyer
2103 2021-10-06 11:05:00 Whiteys Surprise
2104 2021-10-06 11:05:00 Astons Lucy
名称是连接两个表的变量:
Date_Time name cc
13 2021-09-15 12:16:00 Hollyhill Island 6.00
14 2021-09-06 10:46:00 Hollyhill Island 4.50
15 2021-05-30 18:28:00 Hollyhill Island 3.50
16 2021-05-25 10:46:00 Hollyhill Island 2.50
17 2021-05-18 12:46:00 Hollyhill Island 2.38
18 2021-04-05 12:31:00 Hollyhill Island 3.50
19 2021-04-28 12:16:00 Hollyhill Island 3.75
我想将此表中的聚合数据添加到第一个表中。比如加上cc的均值和计数。
Date_Time name
1 2021-09-06 10:46:00 Hollyhill Island
这一行我会为 cc 计数添加 5,为 cc 平均值添加 3.126。请记住,历史记录需要在各个记录的日期时间之前。
我有点困惑如何有效地做到这一点。我知道我需要按历史数据分组。
此外,单个记录通常以 Date_Time 组的形式出现,如果这样更容易的话。
【问题讨论】:
【参考方案1】:IIUC:
尝试:
out=df1.merge(df2,on='name',suffixes=('','_y'))
#merging both df's on name
out=out.mask(out['Date_Time']<=out['Date_Time_y']).dropna()
#filtering results
out=out.groupby(['Date_Time','name'])['cc'].agg(['count','mean']).reset_index()
#aggregrating values
out
的输出:
Date_Time name count mean
0 2021-09-06 10:46:00 Hollyhill Island 5 3.126
【讨论】:
谢谢。我只想为“名称”聚合数据,而不是您的解决方案可能是正确的。但问题是我需要为第一个数据帧中的每条记录执行此操作。对于 df1 中的每条记录,我都需要来自 df2 的历史数据,因此我必须多次进行此计算,它可能效率不高。 假设在一小时内还有 Hollyhill Island 的另一个示例,您将不得不再次计算,因为历史数据中可能会有新示例。 @BorutFlis 对不起,先生,如果我不明白...但是我们正在合并两个 df 的名称,所以我认为在数据动态之前可能不需要重复该过程 因为 df1 中的行会随着时间的推移而发展。 df1 开头的 Hollyhill Island 符合 df2 条件的历史记录少于 df2 结尾的 Hollyhill Island。我知道这很难解释。而且我的示例数据没有显示这个例子,我会尝试编辑它。以上是关于如何将记录与汇总的历史数据合并?的主要内容,如果未能解决你的问题,请参考以下文章