【问题标题】:Map and merge values from another dataframe映射和合并来自另一个数据框的值
【发布时间】:2021-09-10 17:59:59
【问题描述】:

1.输入具有随机数值的数据框:

ID  num
a    2
a,b  3
b    1
c,e  4

我有另一个数据框:

ID  name
a    a1
b    b5
c    c4
d    d1
e    e6

2.预期结果:我想在 ID 上将 df1 与 df2 映射并存储为另一列:

ID  num  ID_name
a    2    a1
a,b  3    a1,b5
b    1    b5
c,e  4    c4,e6

3.我试过的代码:

df1["ID_name"] = df1["ID"].map(df2)
df1

但是这些值没有被映射并显示大多数值的 NAN

【问题讨论】:

  • 想要的是一个“合并”
  • 是的,按照 ID 列合并
  • 所以查找 df.merge 并尝试一下
  • 但它没有合并同一行中的 2 个值

标签: python pandas dataframe dictionary


【解决方案1】:

我们可以使用Series.str.split,然后在元素上使用Series.map和groupby。

df["ID_name"] = (
    df["ID"]
    .str.split(",")
    .explode()
    .map(df2.set_index("ID")["name"])
    .groupby(level=0)
    .agg(",".join)
)

    ID  num ID_name
0    a    2      a1
1  a,b    3   a1,b5
2    b    1      b5
3  c,e    4   c4,e6

【讨论】:

  • 它处于浮动状态。 TypeError: sequence item 0: expected str instance, float found
  • @AnubhavNegi 可能是您的原始数据框与您在问题中发布的不同。你能发布你原来的df吗?
  • 我已经重新检查过了,数据格式和一切都一样
  • 我将通过将值转换为字符串来尝试一次
  • @AnubhavNegi 你的问题根本没有浮动。错误消息中的浮点数来自哪里?
猜你喜欢
  • 2016-05-10
  • 2018-04-20
  • 2020-09-16
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
相关资源
最近更新 更多