#python #pandas #dataframe #merge #append
Вопрос:
У меня есть два фрейма данных
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)
- Поэтому в этой проблеме мне нужно взять всех джедаев из jedis_df через jedi_df и подтвердить, что
они существуют в inventory_df. (например,jedi_id 2 существует в инвентаре) - Как только идентификатор идентифицирован и находится в jedis_df, связанный с ним разграбленный предмет присоединится к jedis_df с соответствующим идентификатором
- Пример: У Ревана будет «бластер, голокрон» в столбце «Награбленные предметы» и та же ячейка рядом с соответствующим идентификатором джедая
x = jedis_df.merge( inventory_df.groupby("jedi_number").sum(), left_on="jedi_id", right_index=True, how="left", )
- Я попытался объединить две таблицы, но не смог найти способ найти решение.
- Я действительно знаю только, как добавить один конкретный соответствующий идентификатор соответствия в одну ячейку, так что это ново для меня.
Если бы кто-нибудь мог помочь с этой проблемой, я был бы очень признателен
Ответ №1:
groupby.sum
автоматически исключает нечисловые столбцы, поэтому он не объединяет строки внутри групп так, как вы могли бы ожидать.
Решение состоит в том, чтобы работать ', ',join
со Loot
значениями каждой группы.
Вариант 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
должна привести к желаемому результату.
Комментарии:
1. Это Сработало! Большое вам спасибо! Пришлось преобразовать вывод в DF и повторно проиндексировать фрейм данных, но отличное решение.