2017-03-29 1 views
1

역 (아니오)에 표시된 날짜 수를 계산하는 열을 추가하려고합니다.Python Pandas 행을 반복하고 고유 한 열 쌍이 표시된 횟수를 계산합니다.

예를 들어, 2012 년 6 월 12 일은 No1에 1 개의 레코드 만 표시하므로 1로 계산됩니다. 3/11에 3 개의 레코드가 있습니다. 첫 번째 발생은 1로 계산됩니다. 두 번째 발생을 2로 계산되며, 그래서, 및 입력

3으로 제 발생 카운트 :

No Date  Value  
0 1 6/12/2013 35 
1 1 6/13/2013 45 
2 1 6/14/2013 23 
3 1 6/14/2013 40 
4 2 6/12/2013 15 
5 2 6/13/2013 20 
6 2 6/14/2013 24 
7 2 7/23/2013 33 
8 3 5/11/2013 10 
9 3 5/11/2013 11 
10 3 5/11/2013 34 
11 3 5/18/2013 24 
. 
. 
. 

결과는 다음과 같이 표시한다 :

No Date  Value count 
0 1 6/12/2013 35  1 
1 1 6/13/2013 45  1 
2 1 6/14/2013 23  1 
3 1 6/14/2013 40  2 
4 2 6/12/2013 15  1 
5 2 6/13/2013 20  1 
6 2 6/14/2013 24  1 
7 2 7/23/2013 33  1 
8 3 5/11/2013 10  1 
9 3 5/11/2013 11  2 
10 3 5/11/2013 34  3 
11 3 5/18/2013 24  1 
. 
. 
. 

내 자신의 해결책이

result = [] 
for n in df['No'].unique(): 
    df1 = df[df['No'] == n] 
    for date in df1['Date'].unique(): 
     df2 = df1[df1['Date'] == date] 
     df2['count'] = np.arange(len(df2)) + 1 
     result.append(df2) 

결과를 병합하십시오. 하지만 꽤 느리게 실행됩니다. 더 나은 해결책이 있습니까?

답변

1

groupby 수행하고 cumcount 사용

No  Date Value count 
0 1 6/12/2013  35  1 
1 1 6/13/2013  45  1 
2 1 6/14/2013  23  1 
3 1 6/14/2013  40  2 
4 2 6/12/2013  15  1 
5 2 6/13/2013  20  1 
6 2 6/14/2013  24  1 
7 2 7/23/2013  33  1 
8 3 5/11/2013  10  1 
9 3 5/11/2013  11  2 
10 3 5/11/2013  34  3 
11 3 5/18/2013  24  1 
:

df['count'] = df.groupby(['No', 'Date']).cumcount() + 1 

은 0

에 필요한 cumcount 시작 이후에 생성 된 출력을 추가 1

관련 문제