繁体   English   中英

熊猫:某列中的总和

[英]Pandas: sum values in some column

我需要对元素进行分组并将其汇总为一列。

   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

我做错了什么?

您需要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。

您做错的是您尝试将其分配给原始数据帧中的列。 而且由于新列的行数少于原始数据帧的行数,因此最后会重复该列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM