2017-02-15 9 views
1

要素をグループ化して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_pathevent_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 

I

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

あなたが集約sumとパラメータsort=Falseas_index=Falsegroupbyが必要になります。

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

あなたが間違っていることは、元のデータフレームの列にそれを割り当てようとすることです。また、新しい列の行数が元のデータフレームよりも少ないため、最後に繰り返し表示されます。

関連する問題