根据列表的列和列连接熊猫数据框

时间:2020-04-17 01:30:11

标签: python pandas join

我正在尝试基于多个列连接两个数据框。但是,条件之一不是直接的,因为一个数据帧中的一列存在于另一数据帧中的列表列中。如下

df_a:

enter image description here

df_b:

enter image description here

我想基于节点,通道,值来连接两个数据帧。但是,值在列尾的列表中

我试图从df_a创建一个字典,以将节点和通道作为键,但是那不是唯一的,我将该值添加为键,但是后来我找不到该值。解决此问题的任何技巧都将受到赞赏

1 个答案:

答案 0 :(得分:1)

如果不是总是第一个元素尝试,则通过@JonClements更新每个评论:

(df_b.assign(value=df_b['trail'].str.split(','))
     .explode('value')
     .merge(df_a, on=['node', 'channel', 'value']))

请尝试,如果值始终是路径中的第一个元素:

import pandas as pd

df_a = pd.DataFrame({'node':['a']*4, 
                     'channel':[1,2,1,2],   
                     'wavelength':[555, 666, 555, 666], 
                     'value':['1-111-5', '1-222-6', '1-111-7', '1-222-8']})

df_b = pd.DataFrame({'node':['a']*4,
                     'channel':[1,2,1,2],
                     'trail':['1-111-5,1-a-5,2-r-3', 
                             '1-222-6,2-4-5,1-d-3', 
                             '1-111-7,1-a-2,1-f-t', 
                             '1-222-8,1-e-4'],
                    'power':[10,12,13,12]})

df_out = (df_b.assign(value=df_b['trail'].str.split(',').str[0])
              .merge(df_a, on=['node', 'channel', 'value']))
print(df_out)

输出:

  node  channel                trail  power    value  wavelength
0    a        1  1-111-5,1-a-5,2-r-3     10  1-111-5         555
1    a        2  1-222-6,2-4-5,1-d-3     12  1-222-6         666
2    a        1  1-111-7,1-a-2,1-f-t     13  1-111-7         555
3    a        2        1-222-8,1-e-4     12  1-222-8         666