Как использовать значение группировки в функции агрегирования в pandas? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть фрейм данных, состоящий из двух столбцов: первый - для имен групп, а второй - для значений, относящихся к данной группе (поэтому одна группа может иметь несколько значений). Я хотел бы объединить значения, чтобы сохранить только одну запись для каждой группы, а также добавить дополнительную информацию.

grouped = df.groupby('group_name').agg(lambda x: 'some additional info:\n{}'.format('\n'.join(x)))

образец строки сгруппирован выглядит следующим образом:

Citrus    "some additional info\nLemon\nOrange\nGrapefruit"

Есть ли какой-нибудь элегантный способ включить имя_группы в такую ​​агрегацию, чтобы результат был таким, как показано ниже?

Citrus    "some additional info\nCitrus\nLemon\nOrange\nGrapefruit"

1 Ответ

0 голосов
/ 17 апреля 2020

Использование:

print (df)
  group_name         col
0     Citrus       Lemon
1     Citrus      Orange
2     Citrus  Grapefruit

Поскольку GroupBy.agg метод, работающий с каждым столбцом отдельно, возможно преобразовать столбец в индекс и выбрать значение индекса:

f = lambda x: 'some additional info:\n{}\n{}'.format(x.index[0], '\n'.join(x))
grouped = df.set_index('group_name').groupby('group_name')['col'].agg(f)
print (grouped)
group_name
Citrus    some additional info:\nCitrus\nLemon\nOrange\n...
Name: col, dtype: object

Или возможно использовать GroupBy.apply:

f = lambda x: 'some additional info:\n{}\n{}'.format(x.name, '\n'.join(x['col']))
grouped = df.groupby('group_name').apply(f)
print (grouped)
group_name
Citrus    some additional info:\nCitrus\nLemon\nOrange\n...
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...