Pandas 값 인접한 것끼리 그룹 지정하기

1 개요[ | ]

Pandas 인접한 것끼리 그룹 지정하기
  • 특정 컬럼으로 정렬되어 있는 경우에, 그 컬럼값이 인접한 것끼리 그룹 지정

2 예시 1[ | ]

  • num이 연속된 값이면 같은 그룹, 그렇지 않으면 다른 그룹
import pandas as pd
df = pd.DataFrame({
  'name': ['A','B','C','D','E','F','G','H'],
  'num':  [  1,  2,  3,  7,  8, 10, 13, 14],
})
df
df['group'] = (df.num.diff()>1).cumsum() + 1
df
df['group'] = (df.num != df.num.shift()+1).cumsum()
df

3 예시 2[ | ]

  • 이전 행과 timestamp의 차이가 1800초(30분) 초과이면 다른 그룹(여기서는 세션)으로 지정
import pandas as pd
import io
csv="""
access_id	timestamp
1001	1600096200
1002	1600096600
1003	1600098112
1004	1600099361
1005	1600100758
1006	1600102905
1007	1600103307
1008	1600105711
1009	1600105878
1010	1600106064
1011	1600108489
1012	1600108793
"""
df = pd.read_csv(io.StringIO(csv),sep='\t')
df
df['session_id'] = (df.timestamp.diff() > 1800).cumsum() + 1
df
df['session_id'] = (df.timestamp - df.timestamp.shift() > 1800).cumsum() + 1
df

4 예시 3: datetime[ | ]

import pandas as pd
import numpy as np
df = pd.read_csv('https://raw.githubusercontent.com/jmnote/zdata/master/kaggle.com/kredy10/basic-eda-of-solar-power-generation-in-italy/data/TimeSeries_TotalSolarGen_and_Load_IT_2015.csv')
df['utc_timestamp'] = pd.to_datetime(df['utc_timestamp'])
df = df.loc[df['IT_solar_generation'] > 2]
df
df['diff_seconds'] = df['utc_timestamp'].diff() / np.timedelta64(1, 's')
df['group_id'] = (df['diff_seconds'] > 86400).ne(0).cumsum() + 1
df
import seaborn as sns
sns.countplot(data=df, x='group_id').plot()

5 같이 보기[ | ]

6 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}