首页 > 解决方案 > 通过将列中的值与另一列中的列表匹配来连接数据帧

问题描述

我有 2 个具有以下格式的数据框:

    df1

    ID                     age
    [111, 222, 333]        15
    [444]                  9
    [555, 666, 777, 888]   8


    df2

    ID                school
    222               A
    777               B

我需要通过匹配 ID 来连接它们以获得以下结果

    df1_ID                 age   df2_ID   school 
    [111, 222, 333]        15    222      A
    [555, 666, 777, 888]   8     777      B

df1_ID 可能是最多 10 个 ID 的列表,我想不出一种有效连接数据帧的方法。你会如何处理这个问题?谢谢。

标签: pythonpandas

解决方案


如果想要有效地处理数据,就必须改变格式,因为list在 pandas 中使用 s 显然很

from itertools import chain

df11 = pd.DataFrame({
    'ID' : list(chain.from_iterable(df1['ID'].tolist())), 
    'age' : df1['age'].values.repeat(df1['ID'].str.len())
})

print (df11)
    ID  age
0  111   15
1  222   15
2  333   15
3  444    9
4  555    8
5  666    8
6  777    8
7  888    8

df12 = df11.merge(df2, on='ID', how='left')
print (df12)
    ID  age school
0  111   15    NaN
1  222   15      A
2  333   15    NaN
3  444    9    NaN
4  555    8    NaN
5  666    8    NaN
6  777    8      B
7  888    8    NaN

推荐阅读