0

我有两个要合并的不均匀数据集。

只是为了记录,数据是关于用户(有一个 ID)和用户会话(也有一个 ID)。由于每个用户可以有多个会话,因此每个用户 ID 可以出现多次。因此,唯一的唯一标识符是用户 ID 和会话 ID 的组合。(简而言之,用户 ID 在用户之间是唯一的,但在用户会话之间是不明确的)。

因此,df1 包含有关每个会话的信息('unique_id')。在这些信息中,还有用户的id('ambig id')。现在,还有另一个数据框 (df2),其中包含有关用户的信息 (values1, values2)。

所以,我想在基于会话的 df (df1) 中添加来自 df2 的用户信息。示例数据框如下:

df1

   ambig_id unique_id
0         1       1.1
1         2       2.1
2         3       3.1
3         4       4.1
4         1       1.2
5         2       2.2
6         3       3.2
7         4       4.2

df2

   ambig_id  values1  values2
0         1      101      201
1         2      102      202
2         3      103      203
3         4      104      204
4         5      105      205
5         6      106      206
6         7      107      207
7         8      108      208
8         9      109      209
9        10      110      210

想要的_df

   ambig_id unique_id  values1  values2
0         1       1.1      101      201
1         2       2.1      102      202
2         3       3.1      103      203
3         4       4.1      104      204
4         1       1.2      101      201
5         2       2.2      102      202
6         3       3.2      103      203
7         4       4.2      104      204

我已经通过 pd.merge_ordered 做到了:

test_df = pd.merge_ordered(df1,df2,left_by='ambig_id')

但是对于大型数据集来说似乎很慢。关于如何提高此任务的性能有什么想法吗?

(在示例数据框的代码下方)

df1 = pd.DataFrame.from_dict({'ambig_id':[1,2,3,4,1,2,3,4], 'unique_id':['1.1', '2.1', '3.1', '4.1', '1.2', '2.2', '3.2', '4.2']})

df2 = pd.DataFrame.from_dict({'ambig_id':[1,2,3,4,5,6,7,8,9,10],
                              'values1':[101,102,103,104,105,106,107,108,109,110],
                              'values2': [201, 202, 203, 204, 205,206, 207, 208, 209, 210]})

desired_df = pd.DataFrame.from_dict({'ambig_id':[1,2,3,4,1,2,3,4],
                                     'unique_id':['1.1', '2.1', '3.1', '4.1', '1.2', '2.2', '3.2', '4.2'],
                                     'values1': [101,102,103,104,101,102,103,104],
                                    'values2': [201, 202, 203, 204,201, 202, 203, 204]})

4

1 回答 1

0

我认为简单的左合并应该适合你,(适用于样本数据和预期输出):

>>> df1.merge(df2, how='left')

   ambig_id  unique_id  values1  values2
0         1        1.1      101      201
1         2        2.1      102      202
2         3        3.1      103      203
3         4        4.1      104      204
4         1        1.2      101      201
5         2        2.2      102      202
6         3        3.2      103      203
7         4        4.2      104      204
于 2021-08-01T12:45:20.110 回答