복붙노트

[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. ==============================

    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
    
  2. from https://stackoverflow.com/questions/40804265/how-to-calculate-time-difference-by-group-using-pandas by cc-by-sa and MIT license