"Pandas 그룹 내에서 인접한 것끼리 그룹 지정하기"의 두 판 사이의 차이

 
(같은 사용자의 중간 판 7개는 보이지 않습니다)
10번째 줄: 10번째 줄:
tsv="""
tsv="""
user_id num
user_id num
1 1
1 2
2 3
2 3
2 4
2 4
22번째 줄: 20번째 줄:
1 8
1 8
1 9
1 9
1 10
2 12
2 13
1 13
1 14
1 15
1 16
"""
"""
df = pd.read_csv(io.StringIO(tsv),sep='\t')
df = pd.read_csv(io.StringIO(tsv),sep='\t')
34번째 줄: 25번째 줄:
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang='python' notebook=1>
<syntaxhighlight lang='python' notebook=1>
df['group'] = df['user_id']*100 + (df['num'] - df.groupby('user_id')['num'].shift() > 1).cumsum() + 1  
df['group'] = df.groupby('user_id')['num'].diff() > 1
df['group'] = df.user_id*100 + df.groupby('user_id')['group'].cumsum() + 1
df
df
</syntaxhighlight>
</syntaxhighlight>


==예시 2==
==예시 2==
<syntaxhighlight lang='python' notebook>
<syntaxhighlight lang='python' notebook=2>
import pandas as pd
import io
 
tsv="""
user_id access_id timestamp
1 1001 1600096200
1 1002 1600096600
2 1002 1600097000
2 1001 1600097051
1 1003 1600098112
1 1004 1600099361
2 1003 1600099624
2 1004 1600100610
1 1005 1600100758
2 1005 1600102155
1 1006 1600102905
1 1007 1600103307
2 1007 1600103709
2 1006 1600105052
1 1008 1600105711
1 1009 1600105878
1 1010 1600106064
1 1011 1600108489
1 1012 1600108793
"""
df = pd.read_csv(io.StringIO(tsv),sep='\t')
df
</syntaxhighlight>
<syntaxhighlight lang='python' notebook=2>
df['user_session_id'] = df.groupby('user_id')['timestamp'].diff() > 1800
df['user_session_id'] = df.groupby('user_id')['user_session_id'].cumsum() + 1
df
</syntaxhighlight>
<syntaxhighlight lang='python' notebook=2>
df['global_session_id'] = df.user_id * 100 + df['user_session_id']
df
</syntaxhighlight>
</syntaxhighlight>
==예시 2==


==같이 보기==
==같이 보기==
49번째 줄: 75번째 줄:
* [[Pandas 인접한 것끼리 그룹 지정하기]]
* [[Pandas 인접한 것끼리 그룹 지정하기]]
* [[Pandas 그룹 내에서 이전 행과의 차이 구하기]]
* [[Pandas 그룹 내에서 이전 행과의 차이 구하기]]
* [[Pandas 그룹 내에서 시간 인접한 것끼리 그룹 지정하기]]


==참고==
==참고==

2021년 10월 23일 (토) 15:11 기준 최신판

1 개요[ | ]

Pandas 그룹 내에서 인접한 것끼리 그룹 지정하기

2 예시 1[ | ]

  • user_id별로 num이 연속된 값이면 같은 그룹, 그렇지 않으면 다른 그룹
import pandas as pd
import io

tsv="""
user_id	num
2	3
2	4
1	4
2	5
1	5
2	6
1	7
2	8
1	8
1	9
"""
df = pd.read_csv(io.StringIO(tsv),sep='\t')
df
df['group'] = df.groupby('user_id')['num'].diff() > 1
df['group'] = df.user_id*100 + df.groupby('user_id')['group'].cumsum() + 1
df

3 예시 2[ | ]

import pandas as pd
import io

tsv="""
user_id	access_id	timestamp
1	1001	1600096200
1	1002	1600096600
2	1002	1600097000
2	1001	1600097051
1	1003	1600098112
1	1004	1600099361
2	1003	1600099624
2	1004	1600100610
1	1005	1600100758
2	1005	1600102155
1	1006	1600102905
1	1007	1600103307
2	1007	1600103709
2	1006	1600105052
1	1008	1600105711
1	1009	1600105878
1	1010	1600106064
1	1011	1600108489
1	1012	1600108793
"""
df = pd.read_csv(io.StringIO(tsv),sep='\t')
df
df['user_session_id'] = df.groupby('user_id')['timestamp'].diff() > 1800
df['user_session_id'] = df.groupby('user_id')['user_session_id'].cumsum() + 1
df
df['global_session_id'] = df.user_id * 100 + df['user_session_id']
df

4 같이 보기[ | ]

5 참고[ | ]

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