首页 > 解决方案 > Python/Pandas:如何组合两个 DataFrame,其中一个框架应该是另一个框架单元格内的 DataFrame?

问题描述

我有两个熊猫数据框。两个 DataFrame 都是时间序列,具有以下结构的一个公共列(我们称之为 batchNumber):

[time = index, batchNumber, valueColumn, other fields]

第一个 DataFrame 每个 batchNumber 包含一行,第二个 DataFrame 每个 batchNumber 包含许多行,每行都有一个单独的时间步长。

我想将这两个框架组合成一个具有结构的框架(故意避免“加入”,因为我不确定这是否是正确的技术):

[time1, batchNumber1 = batchNumber2, value1, [(time2[0], value2[0]), (time[1], value[1]), (time[2], value[2]), ..., (time[N], value[N])], other fields1]

因此,一种“数据帧中的数据帧”。那可能吗?怎么能做到这一点?

df1 中的数据如下所示,列 [value, batchNumber, timestamp, otherID]:

[[3.06130831419325e-05 1552608005236178640 '2019-03-15T00:00:05.236178688Z' 1552608005236178640]
[3.1214206203101214e-05 1552608010657198640 '2019-03-15T00:00:10.657198592Z' 1552608010657198640]
[2.9220824990100192e-05 1552608016078218640 '2019-03-15T00:00:16.078218752Z' 1552608016078218640]
[3.1036932744355974e-05 1552608021499238640 '2019-03-15T00:00:21.499238656Z' 1552608021499238640]
[2.9085449547509336e-05 1552608026920258640 '2019-03-15T00:00:26.92025856Z' 1552608026920258640]
        ...

df2 中的数据如下所示,列 [value, batchNumber, timestamp, otherID]:

[[512.5499877929688 1552608005236178640 '2019-03-15T00:00:05.236178688Z' 1552608005236178640]
 [512.7000122070312 1552608005236178640 '2019-03-15T00:00:05.236180736Z' 1552608005236178640]
 [513.0999755859375 1552608005236178640 '2019-03-15T00:00:05.236182528Z' 1552608005236178640]
 [513.0 1552608005236178640 '2019-03-15T00:00:05.236184576Z' 1552608005236178640]
 [513.5 1552608005236178640 '2019-03-15T00:00:05.236186624Z' 1552608005236178640]
 [512.8499755859375 1552608005236178640 '2019-03-15T00:00:05.236188672Z' 1552608005236178640]
 [513.3499755859375 1552608005236178640 '2019-03-15T00:00:05.23619072Z' 1552608005236178640]
 [512.9500122070312 1552608005236178640 '2019-03-15T00:00:05.236192768Z' 1552608005236178640]
 [513.2000122070312 1552608005236178640 '2019-03-15T00:00:05.23619456Z' 1552608005236178640]
 [513.2000122070312 1552608005236178640 '2019-03-15T00:00:05.236196608Z' 1552608005236178640]
 [512.8499755859375 1552608005236178640 '2019-03-15T00:00:05.23619...

可以看到,df1 中有 onbatchNumber 值,而 df2 中有多次相同的 batchNumber,在 df1 和 df2 的行之间创建了 1:n 的关系。

我想让 df2 的所有行匹配 df1 的 batchID 作为添加到 df1 的新单元格中的子表/列表/DataFrame,象征性地说:

df_new.row = df1.row + df2.subset(batchNumber(df2) == batchNumber(df1))

标签: pythonpandasdataframe

解决方案


推荐阅读