2014-11-12 3 views
1

다음은 간단한 문제입니다. 여행의 시작 및 끝 위치가있는 DataFrame이 있습니다. 각 스테이션에 대한 DataFrame을 끝내기를 원합니다. 도착 횟수와 출발 횟수입니다.(mapReduce와 비슷한) dataframe.apply를 사용하여 팬다에서 각 행을 여러 행으로 펼치십시오.

은 내가 한 행 출력 여러 행, 에 걸릴 후 감소 단계에서 모든 행을 통해 집계 할 수있는 지도 상에 맵리 듀스와 같은 워크 플로우에 익숙입니다.

내가 지금 가지고있는 코드는 다음과 같습니다. 작동하지 않습니다. 내 마지막 DataFrame으로 원하는 것은

import pandas as pd 
import numpy as np 

def expand_row(row): 
    return pd.Series(
    { 'station': [row['start_station'], row['end_station']], 
     'departures': [1, 0], 
     'arrivals': [0, 1], 
    }, 
) 

trips = pd.DataFrame({ 
    'start_station': ['a', 'c'], 
    'end_station': ['b', 'a'], 
}) 

expanded = df.apply(expand_row, axis=1) 
aggregated = expanded.groupby('station').aggregate(np.sum) 

desired_df = pd.DataFrame({ 
    'station': ['a', 'b', 'c'], 
    'departures': [1, 0, 1], 
    'arrivals': [1, 1, 0] 
}) 
desired_df.index = desired_df.pop('station') 

많은 감사합니다.

답변

0
import pandas as pd 
trips = pd.DataFrame({ 
    'start_station': ['a', 'c'], 
    'end_station': ['b', 'a'], 
}) 
trips.apply(pd.value_counts).fillna(0) 

결과는 다음과 같습니다

end_station start_station 
a   1    1 
b   1    0 
c   0    1 
+0

은 참으로 내 간단한 예를 들어 작동 않기 때문에 답변을 받아 들였다. 많은 감사합니다. 그러나 사용 사례에는 각 여행마다 타임 스탬프가 있었기 때문에이를 보존하기를 원했기 때문에 다음과 같은 결과를 보았습니다. * 출발과 도착으로 나누기. * 각각에는 또한 '시간'이 있습니다. * num_departures_per_station = departures.groupby ('시간') * num_arrivals_per_station = arrivals.groupby ('시간'). – user162988

관련 문제