Pandas 데이터 프레임에서 조건별로 여러 열을 누적 계산하는 방법 [중복]

Nov 17 2020

DataFrame의 예 :

df = pd.DataFrame({'column_1':['a','a','a','a','a','a','b','b','b','b','b','b','b','b','b','c','c','d','d']
                   ,'column_2':[1,1,1,2,2,2,1,1,1,2,2,2,3,3,3,1,2,2,3]
                  })

그리고 1에서 N까지의 숫자로 조건별로 각 쌍의 열을 세고 싶습니다. 저는 apply 함수를 사용해야한다고 생각하지만 그 현실성을 작성하는 방법을 모릅니다.

.loc과 함께주기를 사용하는 것은 매우 느립니다 (필터링 원인).

for column_1 in df.column_1.unique():
    for column_2 in df.column_2.unique():
        condition = (df.column_1 == column_1)&(df.column_2 == column_2)
        max_range = sum(condition)
        df.loc[condition, 'result'] = range(1, max_range + 1)
df.result = df.result.astype(int)

결과:

답변

2 QuangHoang Nov 17 2020 at 22:11

이것은 groupby().cumcount():

df['result'] = df.groupby(['column_1','column_2']).cumcount()+1

산출:

   column_1  column_2  result
0         a         1       1
1         a         1       2
2         a         1       3
3         a         2       1
4         a         2       2
5         a         2       3
6         b         1       1
7         b         1       2
8         b         1       3
9         b         2       1
10        b         2       2
11        b         2       3
12        b         3       1
13        b         3       2
14        b         3       3
15        c         1       1
16        c         2       1
17        d         2       1
18        d         3       1