2017-02-28 197 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

時你聲明'event_duration <5' - 當行和它的前一個和小於5,或者這個行本身包含一個小於5的值?例如,如果最後一行的值爲2,「facebook.com」是否會成爲總共7行? – asongtoruin

+0

@ason​​gtoruin當字符串中的值小於5時 –

回答

1

我不是從你的問題完全清楚,但我認爲每個成員和路徑組合,你想總和小於5的所有值?如果是這樣,我們就可以通過分離出值的上方和下方5,然後總結那些低於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中的值小於sum –

+0

@PetrPetrov嗯,它不應該是。你能提供一個發生這種情況的例子嗎? – asongtoruin