Как группировать / объединять фрейм данных с различными типами данных - PullRequest
0 голосов
/ 22 октября 2019

У меня есть фрейм данных, который имеет разные типы данных (список, словарь, список словаря, строки и т. Д.).

df = pd.DataFrame([{'category': [{'id': 1, 'name': 'House Targaryen'}],
  'connection': ['Rhaena Targaryen', 'Aegon Targaryen'],
  'description': 'Jon Snow, born Aegon Targaryen, is the son of Lyanna Stark '
                 'and Rhaegar Targaryen, the late Prince of Dragonstone',
  'name': 'Jon Snow'},
 {'category': [{'id': 2, 'name': 'House Stark'},
               {'id': 3, 'name': 'Nights Watch'}],
  'connection': ['Robb Stark', 'Sansa Stark', 'Arya Stark', 'Bran Stark'],
  'description': 'After successfully capturing a wight and presenting it to '
                 'the Lannisters as proof that the Army of the Dead are real, '
                 'Jon pledges himself and his army to Daenerys Targaryen.',
  'name': 'Jon Snow'}]) 

Я хочу объединить эти две строки на Jon Snow и объединить все остальные поля вместе, чтобы это выглядело как

name                          category                                       description                                      connection

Jon Snow    ['House Targaryen','House Stark','Nights Watch'] Jon Snow, born ...... his army to Daenerys Targaryen.   ['Rhaena Targaryen',...,'Bran Stark']

Это может быть немного сложно со списком словарей,так как это игрушечный пример, он содержит только две строки, и его легко explode и объединить две строки категории вместе. Но я не думаю, что это практично в моем наборе данных.

Я тоже думал об использовании df.groupby('name').aggregate('category': func1,'description':func2, 'connection':func3), но я не уверен, есть ли встроенная функция для того, что мне нужно.

Спасибо, yall за помощь!

1 Ответ

1 голос
/ 22 октября 2019

Глядя на ваши данные, можно сначала сделать простые groupby и sum. Затем разберитесь с категориями, используя понимание списка:

import pandas as pd

df = pd.DataFrame([{'category': [{'id': 1, 'name':'House Targaryen'}],
                    'name': 'Jon Snow',
                    'description':'Jon Snow, born Aegon Targaryen, is the son of Lyanna Stark and Rhaegar Targaryen, the late Prince of Dragonstone',
                    'connection':['Rhaena Targaryen', 'Aegon Targaryen']},
                   {'category': [{'id': 2, 'name': 'House Stark'},{'id': 3, 'name': 'Nights Watch'}],
                    'name': 'Jon Snow',
                    'description': 'After successfully capturing a wight and presenting it to the Lannisters as proof that the Army of the Dead are real, '
                                   'Jon pledges himself and his army to Daenerys Targaryen.',
                    'connection':['Robb Stark', 'Sansa Stark', 'Arya Stark', 'Bran Stark']},
                   {"category":[{"id":4,"name":"Some house"}],
                    "name": "Some name",
                    "description": "some desc",
                    "connection":["connection 1"]}])

result = df.groupby("name").sum()
result["category"] = [[item.get("name") for item in i] for i in result["category"]]
result.reset_index(inplace=True)

print (result)

#
            name                                      category                                        description                                         connection
0   Jon Snow  [House Targaryen, House Stark, Nights Watch]  Jon Snow, born Aegon Targaryen, is the son of ...  [Rhaena Targaryen, Aegon Targaryen, Robb Stark...
1  Some name                                  [Some house]                                          some desc                                     [connection 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...