조건부로 timedate 인덱스 편집, 데이터 프레임의 이전 레코드 확인 (Edit timedate index conditionally, checking previous record in a dataframe)


문제 설명

조건부로 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

(by Lorecn1jezrael)

참조 문서

  1. Edit timedate index conditionally, checking previous record in a dataframe (CC BY‑SA 2.5/3.0/4.0)

#Python #pandas #timestamp #Numpy #dataframe






관련 질문

Python - 파일 이름에 특수 문자가 있는 파일의 이름을 바꿀 수 없습니다. (Python - Unable to rename a file with special characters in the file name)

구조화된 배열의 dtype을 변경하면 문자열 데이터가 0이 됩니다. (Changing dtype of structured array zeros out string data)

목록 목록의 효과적인 구현 (Effective implementation of list of lists)

for 루프를 중단하지 않고 if 문을 중지하고 다른 if에 영향을 줍니다. (Stop if statement without breaking for loop and affect other ifs)

기본 숫자를 10 ^ 9 이상으로 늘리면 코드가 작동하지 않습니다. (Code fails to work when i increase the base numbers to anything over 10 ^ 9)

사용자 지정 대화 상자 PyQT5를 닫고 데이터 가져오기 (Close and get data from a custom dialog PyQT5)

Enthought Canopy의 Python: csv 파일 조작 (Python in Enthought Canopy: manipulating csv files)

학생의 이름을 인쇄하려고 하는 것이 잘못된 것은 무엇입니까? (What is wrong with trying to print the name of the student?)

다단계 열 테이블에 부분합 열 추가 (Adding a subtotal column to a multilevel column table)

여러 함수의 변수를 다른 함수로 사용 (Use variables from multiple functions into another function)

리프 텐서의 값을 업데이트하는 적절한 방법은 무엇입니까(예: 경사하강법 업데이트 단계 중) (What's the proper way to update a leaf tensor's values (e.g. during the update step of gradient descent))

Boto3: 조직 단위의 AMI에 시작 권한을 추가하려고 하면 ParamValidationError가 발생합니다. (Boto3: trying to add launch permission to AMI for an organizational unit raises ParamValidationError)







코멘트