2017-02-15 101 views
1

我需要對元素進行分組並將其與一列進行求和。熊貓:某些列的總和值

member_id event_path event_duration 
0  111  vk.com    1 
1  111 twitter.com    4 
2  111 facebook.com    56 
3  111  vk.com    23 
4  222  vesti.ru    6 
5  222 facebook.com    23 
6  222  vk.com    56 
7  333  avito.ru    8 
8  333  avito.ru    4 
9  444  mail.ru    7 
10  444  vk.com    20 
11  444  yandex.ru    40 
12  111  vk.com     10 
13  222  vk.com     20 

而且我想沒有統一member_idevent_path和總和event_duration。 慾望輸出

 member_id event_path event_duration 
0  111  vk.com    34 
1  111 twitter.com    4 
2  111 facebook.com    56 
4  222  vesti.ru    6 
5  222 facebook.com    23 
6  222  vk.com    76 
7  333  avito.ru    12 
9  444  mail.ru    7 
10  444  vk.com    20 
11  444  yandex.ru    40 

我用

df['event_duration'] = df.groupby(['member_id', 'event_path'])['event_duration'].transform('sum') 

,但我得到

member_id event_path event_duration 
0  111  vk.com    34 
1  111 twitter.com    4 
2  111 facebook.com    56 
3  111  vk.com    34 
4  222  vesti.ru    6 
5  222 facebook.com    23 
6  222  vk.com    76 
7  333  avito.ru    12 
8  333  avito.ru    12 
9  444  mail.ru    7 
10  444  vk.com    20 
11  444  yandex.ru    40 
12  111  vk.com    34 
13  222  vk.com    76 

我做什麼了?

回答

3

您需要groupby與參數sort=Falseas_index=False採用聚集sum

df = df.groupby(['member_id','event_path'],sort=False,as_index=False)['event_duration'].sum() 
print (df) 
    member_id event_path event_duration 
0  111  vk.com    34 
1  111 twitter.com    4 
2  111 facebook.com    56 
3  222  vesti.ru    6 
4  222 facebook.com    23 
5  222  vk.com    76 
6  333  avito.ru    12 
7  444  mail.ru    7 
8  444  vk.com    20 
9  444  yandex.ru    40 

另一種可能的解決方案是增加reset_index

df = df.groupby(['member_id', 'event_path'],sort=False)['event_duration'].sum().reset_index() 
print (df) 
    member_id event_path event_duration 
0  111  vk.com    34 
1  111 twitter.com    4 
2  111 facebook.com    56 
3  222  vesti.ru    6 
4  222 facebook.com    23 
5  222  vk.com    76 
6  333  avito.ru    12 
7  444  mail.ru    7 
8  444  vk.com    20 
9  444  yandex.ru    40 

功能transform用於添加聚合計算回到原來的df作爲新的專欄。

1

你在做什麼錯的是你試圖將它分配給原始數據框中的一列。而且,由於新列的行數比原始數據框少,因此最後會重複。