【问题标题】:Grabbing data using an id in one dataframe in another separate dataframe that do not posses the same column name and appending string to one value在另一个单独的数据帧中使用一个数据帧中的 id 抓取数据,该数据帧不具有相同的列名并将字符串附加到一个值
【发布时间】:2021-11-14 13:52:41
【问题描述】:

我有两个数据框

jedis = {jedi_id': ["2", "4", "6", "1"],
'name':["Kylo", "Bastila", "Revan", "Steve from Minecraft"],
'Looted Items':}

inventory = {jedi_number': ["9", "4" , "6", "1", "1", "0", "2", "6", "1" , "55", "4", 
"4", "0", "9"], 'Loot':["Holocron", "Bantha Fodder", "Blaster", "Bantha Fodder", "Credits", "Bantha Fodder", "Blaster", "Bantha Fodder", "Holocron", "Blaster", "Holocron", "bread loaf", "Credits", "Holocron"]}

jedis_df = pd.DataFrame(jedis)
inventory_df = pd.DataFrame(inventory)
  • 所以在这个问题中,我需要通过 jedi_df 从 jedis_df 中取出所有 jedis 并确认 它们存在于inventory_df中。 (ex.jedi_id 2 存在于库存中)

  • 一旦识别出 ID 并在 jedis_df 中,则关联的战利品将附加到带有关联 ID 的 jedis_df 中

    • 示例:Revan 将在“掠夺物品”列和相应绝地 ID 旁边的相同单元格中显示“blaster,holocron”
    x = jedis_df.merge(
    inventory_df.groupby("jedi_number").sum(),
    left_on="jedi_id",
    right_index=True,
    how="left",
    )
    
  • 我尝试合并这两个表,但无法找到解决方案。

  • 我只知道如何将一个特定的对应匹配 id 添加到一个单元格,所以这对我来说是新的。

如果有人能帮助解决这个问题,将不胜感激

【问题讨论】:

    标签: python pandas dataframe merge append


    【解决方案1】:

    groupby.sum 自动排除非数字列,因此它不会像您期望的那样在组内连接字符串。

    解决方案是在每个组的Loot 值上运行', ',join

    选项 1: groupby.agg

    inventory_df.groupby("jedi_number")['Loot'].agg(', '.join)
    

    选项 2: groupby.apply

    inventory_df.groupby("jedi_number")['Loot'].apply(lambda x: ', '.join(x))
    

    两个选项产生相同的输出:

    jedi_number
    0                  Bantha Fodder, Credits
    1        Bantha Fodder, Credits, Holocron
    2                                 Blaster
    4     Bantha Fodder, Holocron, bread loaf
    55                                Blaster
    6                  Blaster, Bantha Fodder
    9                      Holocron, Holocron
    Name: Loot, dtype: object
    

    inventory_df.groupby("jedi_number").sum() 替换为x 表达式中的任一选项应该会产生所需的结果。

    【讨论】:

    • 这成功了!太感谢了!必须将输出转换为 DF 并重新索引数据帧,但很好的解决方案。
    猜你喜欢
    • 2021-11-12
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2021-05-17
    相关资源
    最近更新 更多