반응형
Continuous Cumulative Sum Calculation Using the Pandas Groupby Method
특정 조건이 '시작'할 때 그룹화해서 누적합
목표 : 10이 나올때마다 그룹의 시작으로 간주하여 카운팅, 누적합하고자 할 때.
전제조건
1. 시작조건이 첫 번째 행에 있어야한다.
2. 기준숫자가 1 로 셋팅이 되어야한다.
import pandas as pd
d = {'NAME': ['PIKACHU', 'GYARADOS', 'LAPRAS', 'Rattata', 'ZAPDOS'],
'NUM': [10, 250, 10, 20, 700],
'ENERGY' : [1, 1, 1, 1, 1]}
df = pd.DataFrame(data=d)
df
NAME NUM ENERGY
0 PIKACHU 10 1
1 GYARADOS 250 1
2 LAPRAS 10 1
3 Rattata 20 1
4 ZAPDOS 700 1
df['cumsum'] = df.groupby((df.NUM == 10).cumsum()).ENERGY.cumsum()
df
NAME NUM ENERGY cumsum
0 PIKACHU 10 1 1
1 GYARADOS 250 1 2
2 LAPRAS 10 1 1
3 Rattata 20 1 2
4 ZAPDOS 700 1 3
특정 조건이 '연속'할 때 그룹화해서 누적합
목표 : abnormal이 연속적일 때만 카운팅, 누적합하고자 할때.
전제조건
1. 조건에 해당하는 값만 1로 설정, 나머지 0으로 설정
d = {'NAME': ['normal', 'normal', 'normal', 'abnormal', 'abnormal','normal','abnormal']}
df = pd.DataFrame(data=d)
df['value'] = np.where(df['NAME'] == "abnormal", 1, 0)
df
NAME value
0 normal 0
1 normal 0
2 normal 0
3 abnormal 1
4 abnormal 1
5 normal 0
6 abnormal 1
df['duration_con'] = df.groupby((df.NAME != 'abnormal').cumsum()).value.cumsum()
df
NAME value duration_con
0 normal 0 0
1 normal 0 0
2 normal 0 0
3 abnormal 1 1
4 abnormal 1 2
5 normal 0 0
6 abnormal 1 1
Reference
반응형
'Pandas' 카테고리의 다른 글
[Pandas] 하나의 컬럼을 여러개 컬럼으로 나누는 모든 방법 (0) | 2023.10.15 |
---|---|
[Pandas] merge : 세 개 이상의, 여러 개의 데이터 프레임을 병합하는 방법 (0) | 2023.02.14 |