2017-02-15 89 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

你在做什么错的是你试图将它分配给原始数据框中的一列。而且,由于新列的行数比原始数据框少,因此最后会重复。