在另一个单独的数据帧中使用一个数据帧中的 id 抓取数据,该数据帧不具有相同的列名并将字符串附加到一个值

Posted

技术标签:

【中文标题】在另一个单独的数据帧中使用一个数据帧中的 id 抓取数据,该数据帧不具有相同的列名并将字符串附加到一个值【英文标题】: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 【发布时间】: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 添加到一个单元格,所以这对我来说是新的。

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

【问题讨论】:

【参考方案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 并重新索引数据帧,但很好的解决方案。

以上是关于在另一个单独的数据帧中使用一个数据帧中的 id 抓取数据,该数据帧不具有相同的列名并将字符串附加到一个值的主要内容,如果未能解决你的问题,请参考以下文章

将一个数据帧中的匹配值替换为另一个数据帧中的索引值

单击一帧中的链接并在另一帧中显示 JSP

在 spark scala 中为数据帧中的每个组采样不同数量的随机行

如果日期介于第二个数据帧中的两个日期之间,则 r 标记第一个数据帧中的行

检查panda数据帧中的多个列是否重合并在新列中标记它们

识别父数据帧中不存在于java子集数据帧中的记录