2017-02-28 7 views
1

との和文字列は、私は、データフレームパンダ:条件

member_id event_path event_duration 
111 vk.com 2 
111 vk.com 3 
111 facebook.com 1 
111 facebook.com 4 
111 facebook.com 20 

持ち、event_path[i] == event_path[i-1]event_duration < 5場合、私は、文字列をCONCATする必要があります。 私は

df = df.groupby(['member_id', 'event_path'], 
       sort=False, 
       as_index=False)['event_duration'].sum().where(df['event_duration'] < 5) 

を使用しますが、それは

ValueError: cannot reindex from a duplicate axis 

欲望の出力

111 vk.com 5 
111 facebook.com 5 
111 facebook.com 20 
+0

もしそうなら、私たちはその後、5以下、これらを合計すると、我々は結果として得る2つのフレームをマージし、5以上および以下の値を分離することにより、これを行うことができますあなたは 'event_duration <5'を宣言しています - 行とその前の合計が5より小さいか、または行自体に5より小さい値が含まれているときはこれがありますか?たとえば、最終行の値が2だった場合、 'facebook.com'は合計7行になりますか? – asongtoruin

+0

@ason​​gtoruin文字列の値が5未満の場合 –

答えて

1

を返し、私はあなたの質問から完全に明確ではないんだけど、私は、各メンバーとパスの組み合わせのためにあることを前提とし、あなたは5未満のすべての値を合計したいですか?

import pandas as pd 

df = pd.DataFrame({'member_id': [111, 111, 111, 111, 111], 
        'event_path': ['vk.com', 'vk.com', 'facebook.com', 'facebook.com', 'facebook.com'], 
        'event_duration': [2, 3, 1, 4, 20] 
        }) 

sums = df[df['event_duration'] < 5].groupby(['event_path', 'member_id'], as_index=False).sum() 
large = df[df['event_duration'] >= 5] 

final = pd.concat([sums, large]) 

print final 

プリントアウト:

event_duration event_path member_id 
0    5 facebook.com  111 
1    5  vk.com  111 
4    20 facebook.com  111 
+0

大きなファイルでテストしようとしましたが、データが失われました。 event_durationの値が合計より前の値よりも小さい –

+0

@PetrPetrovうーん、すべきではない。これが起こっている場所の例を教えてください。 – asongtoruin

関連する問題