Pandas Multi Level Groupby: передать диапазон сгруппированных значений в функцию - PullRequest
0 голосов
/ 09 октября 2018

У меня есть фрейм данных с тремя столбцами: «Название компании», «Продукт», «Потратить».

Теперь я хочу сделать следующее:
1) Groupby «Название компании» и«Продукт», чтобы увидеть денежные затраты на компанию и продукт.

grouped=df.groupby(['Company Name', 'Product'])

2) Выполните итерацию только по столбцу «Название компании» сгруппированных и передайте значения «Расходы» в виде списка функции.

Я не знаю, как сделать второй шаг!

Документация pandas только объясняет, как выполнять итерацию по обоим индексам, а не как делать это только для первого.
Я также попробовал это:

grouped.reset_index(level=2, drop=True)

но выдает ошибку.

Есть идеи?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Это будет повторять значения Spend (в виде списка), которые были сгруппированы по Company Name и Product, и передаст список вашей функции.

df.groupby(['Company Name', 'Product'])['Spend'].apply(lambda x: my_func(list(x)))

На основании вашего комментария, если вы хотите перебрать Company Name, получить [50, 45] и передать его функции:

for name in df['Company Name'].unique():
    list_spend = df.groupby(['Company Name', 'Product']).sum()['Spend'][name].tolist()
    my_func(list_spend)
0 голосов
/ 10 октября 2018

Вы можете использовать это:

spent_list = df[["Company Name","Spend"]].groupby("Company Name").sum()["Spend"].values
spent_list = list(spent_list)

Теперь у вас есть spent_list, в котором хранится сумма, которую каждая компания потратила в общей сложности на все продукты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...