본문 바로가기
Pandas

[Pandas] 연속인 조건에서만 누적합(cumsum) 연산

by 자유로운시간 2022. 12. 16.
반응형

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

1. https://note.espriter.net/1339

반응형