【问题标题】:One to Many comparison in pandas two excel column comparison?熊猫两个excel列比较中的一对多比较?
【发布时间】:2020-10-02 03:52:50
【问题描述】:

我正在比较两个电子表格,第二个电子表格在一个列中重复出现该值,第一个电子表格的某些值与第一个电子表格匹配。我想在第二个电子表格中创建另一列并从第一张表中复制相关的电话号码

df1:

df1 = pd.Dataframe({"name":["a","b","c"],"phone number":[1,2,3]})

df2:

df2 = pd.Dataframe({"name":["a","a","a","a","b","b","b","b"]})

预期输出:

**name phno**
a      1
a      1
a      1 
a      1 
b      2
b      2
b      2
b      2

比较两个基于 one_to_many 关系的 excel name 并在 dataframe2 中创建一个新列作为 phno 并复制dataframe1

中的相关 电话号码

感谢您的贡献

【问题讨论】:

    标签: python excel pandas dataframe


    【解决方案1】:

    使用map。创建df1['name']: df1['phone number']dict 并映射到df2['name']

     df2['phno']=df2.name.map(dict(zip(df1.name, df1['phone number'])))
    
    
    
     name  phno
    0    a     1
    1    a     1
    2    a     1
    3    a     1
    4    b     2
    5    b     2
    6    b     2
    7    b     2
    

    【讨论】:

    • 如果与名称不匹配,是否可以在 phno 中分配虚拟值
    • 不太明白你的意思。例子?
    • 如果名称在 df2 中具有“d”值且与 df1 不匹配,因此我需要为 phno 列分配一个值,例如“0”
    • 试试df2['phno']=df2.name.map(dict(zip(df1.name, df1['phone number']))).fillna(0)
    • 很高兴听到,一切顺利
    【解决方案2】:

    您可以在这里使用标准的pd.merge

    In [1302]: df2.merge(df1, on='name')
    Out[1302]: 
      name  phone number
    0    a             1
    1    a             1
    2    a             1
    3    a             1
    4    b             2
    5    b             2
    6    b             2
    7    b             2
    

    【讨论】:

    • @anwarshawn 如果回答有帮助,请upvote
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多