[PYTHON] 팬더를 사용하여 그룹별로 시간차를 계산하는 방법은 무엇입니까?
PYTHON팬더를 사용하여 그룹별로 시간차를 계산하는 방법은 무엇입니까?
그룹별로 차이를 계산하고 싶습니다. 그리고 각 그룹 결과가 정렬되고 긍정적이되도록 시간 열을 정렬하는 방법을 알지 못합니다.
원래 데이터 :
In [37]: df
Out[37]:
id time
0 A 2016-11-25 16:32:17
1 A 2016-11-25 16:36:04
2 A 2016-11-25 16:35:29
3 B 2016-11-25 16:35:24
4 B 2016-11-25 16:35:46
내가 원하는 결과
Out[40]:
id time
0 A 00:35
1 A 03:12
2 B 00:22
주의 사항 : 시간 col 유형은 timedelta64 [ns]입니다.
In [38]: df['time'].diff(1)
Out[38]:
0 NaT
1 00:03:47
2 -1 days +23:59:25
3 -1 days +23:59:55
4 00:00:22
Name: time, dtype: timedelta64[ns]
원하는 결과를 얻지 마십시오.
문제를 해결할뿐만 아니라 5 천만 행이 있기 때문에 코드를 빠르게 실행할 수 있습니다.
해결법
-
==============================
1.groupby와 함께 sort_values를 사용하고 diff를 집계 할 수 있습니다.
groupby와 함께 sort_values를 사용하고 diff를 집계 할 수 있습니다.
df['diff'] = df.sort_values(['id','time']).groupby('id')['time'].diff() print (df) id time diff 0 A 2016-11-25 16:32:17 NaT 1 A 2016-11-25 16:36:04 00:00:35 2 A 2016-11-25 16:35:29 00:03:12 3 B 2016-11-25 16:35:24 NaT 4 B 2016-11-25 16:35:46 00:00:22
diff 열에서 NaT를 사용하여 행을 제거해야하는 경우 dropna를 사용하십시오.
df = df.dropna(subset=['diff']) print (df) id time diff 2 A 2016-11-25 16:35:29 00:03:12 1 A 2016-11-25 16:36:04 00:00:35 4 B 2016-11-25 16:35:46 00:00:22
열을 덮어 쓸 수도 있습니다.
df.time = df.sort_values(['id','time']).groupby('id')['time'].diff() print (df) id time 0 A NaT 1 A 00:00:35 2 A 00:03:12 3 B NaT 4 B 00:00:22
df.time = df.sort_values(['id','time']).groupby('id')['time'].diff() df = df.dropna(subset=['time']) print (df) id time 1 A 00:00:35 2 A 00:03:12 4 B 00:00:22
from https://stackoverflow.com/questions/40804265/how-to-calculate-time-difference-by-group-using-pandas by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] pandas는 DataFrame에서 주어진 색인의 위치를 얻습니다. (0) | 2018.11.27 |
---|---|
[PYTHON] 파이썬 팬더를 사용하여 hh : mm : ss를 몇 분으로 변환하십시오. (0) | 2018.11.27 |
[PYTHON] Google Cloud SQL에 대해 Django 관리 명령을 실행하는 방법 (0) | 2018.11.27 |
[PYTHON] 여러 프로세스에서 단일 파일 처리 (0) | 2018.11.27 |
[PYTHON] 다중 처리 : 여러 프로세스간에 사전을 공유하려면 어떻게해야합니까? (0) | 2018.11.27 |