Pandas groupby, как сделать несколько агрегаций по нескольким столбцам? - PullRequest
2 голосов
/ 10 января 2020

У меня есть такой кадр данных:

    Product    occasion    count
1    cake       wedding     2
2    chairs     funeral     3
3    chairs     wedding     2

Я хочу суммировать столбец count и присоединить столбец occasion к | при группировке данных по продуктам, чтобы получить такой, как показано ниже:

    Product    occasion          count
1   cake       wedding           2
2   chairs     wedding|funeral   5

Сейчас я использую два groupbys и присоединяюсь к результирующим кадрам данных. Есть ли способ сделать это в одном go? Я перепробовал несколько агрегаций, но не смог разобраться в двух столбцах. Спасибо.

Ответы [ 3 ]

4 голосов
/ 10 января 2020

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

df2=df.groupby('Product',as_index = False).agg({'occasion':'|'.join,'count':'sum'})
print(df2)
#  Product         occasion  count
#0    cake          wedding      2
#1  chairs  funeral|wedding      5
0 голосов
/ 10 января 2020

Это более простой и мощный способ.

В моем случае я использовал sum () как функцию, но вы можете использовать mean () или что-то другое, что вам нужно.

dfgrouped = df.groupby(['Col1', 'Col2']).sum()
0 голосов
/ 10 января 2020

Groupby-apply и groupby-sum должны сделать трюк:

Данные

df = pd.DataFrame([['cake', 'wedding', 2],
             ['chairs', 'wedding', 2],
             ['chairs', 'funeral', 3]], columns = ['Product', 'occasion', 'count'])

Решение

df2 = df.groupby('Product')['occasion'].apply(lambda x: "|".join(x)).reset_index().set_index('Product')
df2['count'] = df.groupby('Product')['count'].sum()

Выход

print(df2.to_string())

                occasion  count
Product                        
cake             wedding      2
chairs   wedding|funeral      5
...