【问题标题】:how to compare a column in first dataframe with a column in second dataframe, and extract values from another column in second dataframe upon matching如何将第一个数据框中的列与第二个数据框中的列进行比较,并在匹配时从第二个数据框中的另一列中提取值
【发布时间】:2021-03-10 10:24:05
【问题描述】:

假设我有一个数据框:

a = [['A','def'],['A','xyz'],['A','uiu'], ['B','jkl'], ['C','pqr'], ['C','rty']]
df1 = pd.DataFrame(a, columns=['1', '2'])

    1   2
0   A   def
1   A   xyz
2   A   uiu
3   B   jkl
4   C   pqr
5   C   rty

和另一个数据框:

a = [['A'], ['B'], ['C'],['D']]
df2 = pd.DataFrame(a, columns=['1'])



    1
0   A
1   B
2   C
3   D

我想将 df2 中的列“1”与 df1 中的列“1”进行比较,如果它们匹配,我希望得到一个结果数据框,其中包含与“|”连接的列“2”的值(如果有多个匹配项)。 例如上面两个数据框的结果应该是这样的:

    1   2
0   A   def|xyz|uiu
1   B   jkl
2   C   pqr|rty
3   D   NaN

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    DataFrame.merge 与聚合join 一起使用:

    df = df1.merge(df2, on='1').groupby('1')['2'].agg('|'.join).reset_index()
    print (df)
       1            2
    0  A  def|xyz|uiu
    1  B          jkl
    2  C      pqr|rty
    

    编辑:对于添加 alo 不匹配的值,使用 DataFrame.drop_duplicates 为列 1DataFrame.reindex 的唯一值添加缺失值:

    df22 = df2.drop_duplicates(subset=['1'])
    df = (df1.merge(df22, on='1')
             .groupby('1')['2']
             .agg('|'.join)
             .reindex(df22['1'])
             .reset_index())
    print (df)
       1            2
    0  A  def|xyz|uiu
    1  B          jkl
    2  C      pqr|rty
    3  D          NaN
    

    【讨论】:

    • 如果值不匹配怎么办?让我编辑问题,以便您更改答案。
    • @SaadZaheer - 如果没有匹配,则输出中不存在。
    • 不需要更改解决方案?
    • @SaadZaheer - 是的,给我一些时间。
    猜你喜欢
    • 2018-01-03
    • 2019-05-15
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2017-07-12
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多