如何将记录与汇总的历史数据合并?

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。我知道这很难解释。而且我的示例数据没有显示这个例子,我会尝试编辑它。

以上是关于如何将记录与汇总的历史数据合并?的主要内容,如果未能解决你的问题,请参考以下文章

表格怎么把一样的内容合并

石墨历史数据合并

如何将多个excel表格的数据合并计算到一张表格中

c#中同一个Datatable中的如何把重复的记录合并起来,

mysql union和union all的区别

合并计算+创建数据透视表+筛选+分类汇总