문제 설명
조건부로 timedate 인덱스 편집, 데이터 프레임의 이전 레코드 확인 (Edit timedate index conditionally, checking previous record in a dataframe)
직렬 터미널 소프트웨어로 기록된 데이터가 포함된 csv 파일이 있습니다. 데이터는 다양한 샘플 속도로 생성됩니다.
- 일반적으로 10초마다 1행
이벤트의 경우 초당 많은 문자열이 생성됩니다. 예 참조:
2019‑01‑04 12:39:40,0,0,0,0,0,0,0,0,2048,2048
2019‑01‑04 12: 39:50,0,0,0,0,0,0,0,0,2048,2048
2019‑01‑04 12:40:00,0,0,0,0,0 ,0,0,0,2048,2048
2019‑01‑04 12:40:09,92,20,306,302,0,0,0,0,2548,1956
2019‑01‑04 12:40:09,112,24,306,302,0,0,0,0,2626,1923
2019‑01‑04 12:40:09,136,32,306,302,0,0 0,2688,1884
2019‑01‑04 12:40:09,156,40,306,302,0,0,0,0,2752,1839
2019‑01‑04 12: 40:09,180,48,306,302,0,0,0,0,2795, 1809
2019‑01‑04 12:40:09,200,60,306,302,0,0,0,0,2815,1773
타임스탬프가 추가되었습니다. 소스로 PC 시스템 시간을 사용하여 터미널 소프트웨어에 의해. 불행히도 터미널 소프트웨어는 타임스탬프에 밀리초를 추가하지 않으므로 csv를 데이터 프레임으로 가져올 때 타임스탬프가 같은 레코드가 여러 개 있습니다. 동일한 타임스탬프를 가진 연속적인 레코드가 있는지 어떻게 확인하고, 이 경우 동일한 초 내의 레코드에 n밀리초의 타임델타를 추가합니까?
감사합니다.
csv를 데이터 프레임으로 가져올 때 타임스탬프가 같은 레코드가 여러 개 있습니다. 동일한 타임스탬프를 가진 연속적인 레코드가 있는지 어떻게 확인하고, 이 경우 동일한 초 내의 레코드에 n밀리초의 타임델타를 추가합니까?감사합니다.
csv를 데이터 프레임으로 가져올 때 타임스탬프가 같은 레코드가 여러 개 있습니다. 동일한 타임스탬프를 가진 연속적인 레코드가 있는지 어떻게 확인하고, 이 경우 동일한 초 내의 레코드에 n밀리초의 타임델타를 추가합니까?감사합니다.
참조 솔루션
방법 1:
I believe you need cumcount
for counter per groups, convert to milisecond timedeltas with to_timedelta
and add to DatetimeIndex
:
print (df)
a b c d e f g h i j
0
2019‑01‑04 12:39:11 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:39:21 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:39:31 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:39:40 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:39:50 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:40:00 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:40:09 92 20 306 302 0 0 0 0 2548 1956
2019‑01‑04 12:40:09 112 24 306 302 0 0 0 0 2626 1923
2019‑01‑04 12:40:09 136 32 306 302 0 0 0 0 2688 1884
2019‑01‑04 12:40:09 156 40 306 302 0 0 0 0 2752 1839
2019‑01‑04 12:40:09 180 48 306 302 0 0 0 0 2795 1809
2019‑01‑04 12:40:09 200 60 306 302 0 0 0 0 2815 1773
2019‑01‑04 12:40:09 216 68 306 302 0 0 0 0 2826 1736
2019‑01‑04 12:40:09 232 80 306 302 0 0 0 0 2817 1715
2019‑01‑04 12:40:09 244 88 306 302 0 0 0 0 2804 1665
2019‑01‑04 12:40:09 256 100 306 302 0 0 0 0 2756 1636
print (df.index)
DatetimeIndex(['2019‑01‑04 12:39:11', '2019‑01‑04 12:39:21',
'2019‑01‑04 12:39:31', '2019‑01‑04 12:39:40',
'2019‑01‑04 12:39:50', '2019‑01‑04 12:40:00',
'2019‑01‑04 12:40:09', '2019‑01‑04 12:40:09',
'2019‑01‑04 12:40:09', '2019‑01‑04 12:40:09',
'2019‑01‑04 12:40:09', '2019‑01‑04 12:40:09',
'2019‑01‑04 12:40:09', '2019‑01‑04 12:40:09',
'2019‑01‑04 12:40:09', '2019‑01‑04 12:40:09'],
dtype='datetime64[ns]', name=0, freq=None)
df.index += pd.to_timedelta(df.groupby(level=0).cumcount(), unit='ms')
print (df)
a b c d e f g h i j
2019‑01‑04 12:39:11.000 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:39:21.000 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:39:31.000 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:39:40.000 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:39:50.000 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:40:00.000 0 0 0 0 0 0 0 0 2048 2048
2019‑01‑04 12:40:09.000 92 20 306 302 0 0 0 0 2548 1956
2019‑01‑04 12:40:09.001 112 24 306 302 0 0 0 0 2626 1923
2019‑01‑04 12:40:09.002 136 32 306 302 0 0 0 0 2688 1884
2019‑01‑04 12:40:09.003 156 40 306 302 0 0 0 0 2752 1839
2019‑01‑04 12:40:09.004 180 48 306 302 0 0 0 0 2795 1809
2019‑01‑04 12:40:09.005 200 60 306 302 0 0 0 0 2815 1773
2019‑01‑04 12:40:09.006 216 68 306 302 0 0 0 0 2826 1736
2019‑01‑04 12:40:09.007 232 80 306 302 0 0 0 0 2817 1715
2019‑01‑04 12:40:09.008 244 88 306 302 0 0 0 0 2804 1665
2019‑01‑04 12:40:09.009 256 100 306 302 0 0 0 0 2756 1636