Python/Pandas:如何组合两个数据帧,其中一个帧应该是另一个帧的单元格中的数据帧?

2024-04-28 20:43:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

第一个数据帧包括每个batchNumber一行,第二个数据帧包括每个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中存在一个on batchNumber值,而df2中多次存在相同的batchNumber值,从而在df1和df2的行之间创建了1:n关系

我希望将所有与df1的batchID相匹配的df2行作为子表/list/DataFrame添加到df1的新单元格中,象征性地说:

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

Tags: 数据框架indextimevalue时间序列结构