代码之家  ›  专栏  ›  技术社区  ›  horcle_buzz

在id和值列表之间进行复杂联接的最佳方法

  •  0
  • horcle_buzz  · 技术社区  · 5 年前

    a = {'col1': ['value_1'], 'col2': ['value_4']}
    df_a = pd.DataFramed = pd.DataFrame(data=a)
    
    b = {'col3': [['value_1', 'value_2']], 'col4': ['value_6']}
    df_b = pd.DataFramed = pd.DataFrame(data=b)
    

    然后我想合并列上的两个数据帧 col1 col3 可乐 在你的名单上 可乐 .

    预期的结果是

    >>> df_merged
          col1     col2                    col3       col4
    0  value_1  value_4   ['value_1', 'value_2']  'value_6'
    

    通过按值获取列表,我能够解构列表:

    ids = df_b.iloc[0]['col3']]
    

    然后我可以迭代列表,将列表值插入到df_b中的新列中,等等,然后我继续进行多个合并,等等,但是这很难看,而且看起来非常随意。

    因此,我正在寻找一种干净和“pythonic”(读作优雅和广义)的合并方式。

    1 回复  |  直到 5 年前
        1
  •  1
  •   BENY    5 年前

    我以使用 unnesting 方法展平df_b,然后执行 merge

    s=unnesting(df_b,['col3']).reset_index()
    
    newdf=df_a.merge(s[['col3','index']],left_on='col1',right_on='col3',how='left').drop('col3',1)
    newdf.merge(df_b,left_on='index',right_index=True,how='left')
          col1     col2  index                col3     col4
    0  value_1  value_4      0  [value_1, value_2]  value_6