2017-02-28 1 views
1

와 합 문자열은 내가 dataframe팬더 : 조건

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

@asongtoruin 문자열의 값이 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의 값이 합계보다 작습니다. –

+0

@PetrPetrov 흠, 그렇게해서는 안됩니다. 이 문제가 발생하는 곳의 예를 제시 할 수 있습니까? – asongtoruin