我是新手,尝试阅读文档并尝试各种示例,但我正在处理的问题确实让我困惑。
我有以下两个数据帧(DataA / DataB),我希望按照每个global_index / item / values合并它们。
DataA DataB
row item_id valueA row item_id valueB
0 x A1 0 x B1
1 y A2 1 y B2
2 z A3 2 x B3
3 x A4 3 y B4
4 z A5 4 z B5
5 x A6 5 x B6
6 y A7 6 y B7
7 z A8 7 z B8
这些项(item_ids)的清单是有限的,并且这两个数据帧分别表示在给定的global_index值下,一个项的trait A和trait B的值。
global_index可以大致看作是一个“时间”单位。
通过以下两个映射器数据帧(DataA/DataB),将每个数据帧与global_index之间的映射关系进行处理:
DataA_mapper
global_index start_row num_rows
0 0 3
1 3 2
3 5 3
DataB_mapper
global_index start_row num_rows
0 0 2
2 2 3
4 5 3
简单来说,对于给定的全局索引(例如:1),映射器将定义与该全局索引相关联的各个数据帧(DataA或DataB)中的行列表。
例如,对于全局索引值为0: - 在DF DataA中,行0到2与全局索引0相关联。 - 在DF DataB中,行0到1与全局索引0相关联。
另一个例子,对于全局索引值为2: - 在DF DataB中,行2到4与全局索引2相关联。 - 在DF DataA中,没有与全局索引2相关联的行。
表示的范围[start_row,start_row + num_rows)不交叉,并且在其各自的数据帧(DataA、DataB)中表示唯一的序列/行范围。
简而言之,DataA或DataB中的任何一行都不会在多个范围中找到。
我想合并这些数据帧,以便获得以下数据帧。
row global_index item_id valueA valueB
0 0 x A1 B1
1 0 y A2 B2
2 0 z A3 NaN
3 1 x A4 B1
4 1 z A5 NaN
5 2 x A4 B3
6 2 y A2 B4
7 2 z A5 NaN
8 3 x A6 B3
9 3 y A7 B4
10 3 z A8 B5
11 4 x A6 B6
12 4 y A7 B7
13 4 z A8 B8
在最终的数据框中任何一对全局索引/item_id,都会出现以下情况之一:
- 同时存在valueA和valueB的值
- 仅存在valueA的值
- 仅存在valueB的值
global_index == 2
时,即使DataA_mapper
表中没有列出,你是如何得到valueA
值的,@Lucinda Rigetti,你能解释一下吗? - Sido4odus