나는 지금은 시간을 각각 계산하는 원 데이터 프레임 아래에있는 SOURCE 에서 나쁜 상태.
예를 들어, 소스 A는 에 나쁜 상태 에서 2020년 12월 16일 14시 57분 56초 에 2020-12-16-14 : 58 : 01 약 5 초이며, 이는 유사 출처는 서로 다른 시간에 대한 나쁜 상태도 우표. Bad 상태 일 때마다 각 소스의 기간을 계산하고 싶었습니다.
다음은 데이터 프레임 코드입니다.
import pandas as pd
import datetime
times=[datetime.datetime(2020, 12, 16, 14, 57, 56, 647689),datetime.datetime(2020, 12, 16, 14, 57, 59, 650766),datetime.datetime(2020, 12, 16, 14, 58, 1, 655858),datetime.datetime(2020, 12, 16, 14, 58, 4, 657299),datetime.datetime(2020, 12, 16, 14, 58, 5, 661615),datetime.datetime(2020, 12, 16, 14, 58, 6, 662729),datetime.datetime(2020, 12, 16, 14, 58, 10, 663151),datetime.datetime(2020, 12, 16, 14, 58, 13, 664116),datetime.datetime(2020, 12, 16, 14, 58, 16, 664501),datetime.datetime(2020, 12, 16, 14, 58, 17, 668526)]
source=['A','A','A','A','A','A','A','B','B','B']
status=['Bad','Bad','Good','Bad','Bad','Good','Good','Good','Good','Good']
df=pd.DataFrame({'time':times, 'source':source,'status':status})
In [299]: df
Out[299]:
time source status grp
0 2020-12-16 14:57:56.647689 A Bad 1
1 2020-12-16 14:57:59.650766 A Bad 1
2 2020-12-16 14:58:01.655858 A Good 2
3 2020-12-16 14:58:04.657299 A Bad 3
4 2020-12-16 14:58:05.661615 A Bad 3
5 2020-12-16 14:58:06.662729 A Good 4
6 2020-12-16 14:58:10.663151 A Good 4
7 2020-12-16 14:58:13.664116 B Good 1
8 2020-12-16 14:58:16.664501 B Good 1
9 2020-12-16 14:58:17.668526 B Good 1
In [340]: df['time2'] = df.groupby('source').time.shift(-1)
In [341]: df['grp'] = df.groupby('source').status.transform(lambda x: (x != x.shift()).cumsum())
In [343]: df[df.status == 'Bad'].groupby(['source', 'grp']).agg({'time': min, 'time2': max}).reset_index().drop('grp', axis=1)
Out[343]:
source time time2
0 A 2020-12-16 14:57:56.647689 2020-12-16 14:58:01.655858
1 A 2020-12-16 14:58:04.657299 2020-12-16 14:58:06.662729
논리
grp
이 연속 상태가 동일한 값을 얻을 수 있도록 열 소스 내의 각 상태들에 대한 그룹 번호를 할당이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다