Python에서 Pandas를 사용하여 데이터 프레임을 datetime 항목으로 효율적으로 재구성하는 방법은 무엇입니까?

바트 큐브 리치

다음 데이터 프레임이 있습니다.

여기에 이미지 설명 입력

나는 다음과 같이 보이기를 원합니다 (날짜 색인, 역 열) :

여기에 이미지 설명 입력

방송국 이름은 중요하지 않습니다. 다른 파일을 사용하여 작업 예를 보여야했습니다.

이 첫 번째 데이터 프레임에는 하루 중 시간을 나타내는 0-23 열이 있습니다. 또한 각 행에 날짜 및 역 (위치) 정보가 있습니다. 인덱스 (또는 행)가 열의 시간과 행의 날짜를 결합한 날짜 시간이어야합니다. 각 스테이션이 행에 저장되는 대신 열이 필요합니다.

나는 그것을 달성하기 위해 다음 코드를 사용했지만 적당한 수의 행조차도 처리하는 데 매우 오랜 시간이 걸립니다.

import os
import pandas as pd
idx = pd.IndexSlice

df=pd.read_csv(os.path.join(filepath,newfilename)) # get data
df=df[df['POC']==1] #only keep primary intrument at each site
cols=['Site AQS', 'Date (LST)', '0', '1', '2', '3', '4', '5', '6',
       '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18',
       '19', '20', '21', '22', '23']

df=df[cols] #subset to only relevant columns

df_align1=pd.pivot_table(df,index='Date (LST)',columns=['Site AQS'])  #pivot data to easier view

ozone_df=pd.DataFrame() #create ouput df

for date in df_align1.index:
    for station in df_align1.columns.get_level_values(1):
        for i in df_align1.columns.get_level_values(0):
            ozone_df.loc[pd.to_datetime(date+' '+str(i)+':00'),station]=df_align1.loc[date,idx[i, station]]

여기에 제가 작성한 코드를 테스트 할 수 있도록 샘플 데이터에 대한 링크가 있습니다.

https://drive.google.com/file/d/11Lzl_m_EBCxoBEutl0UP6_TKq6TNgVZI/view?usp=sharing

추신 : 이미지가 좋지 않아서 죄송합니다. 원격 컴퓨터를 사용하고 있는데 좋은 스크린 샷을 얻을 수 없습니다.

Eric Truett

당신이 사용할 수있는 meltpivot_table

# setup the initial dataframe
dates = np.repeat(pd.date_range(start='1/1/2018', end='1/03/2018'), 3)
stations = np.tile(['O', 'E', 'L',], 3)
vals = np.random.rand(len(dates),len(cols))
df = pd.DataFrame(vals)
df.insert(0, 'Date', dates)
df.insert(1, 'Station', stations)

데이터 프레임 녹이기

melted = df.melt(id_vars=['Date', 'Station'], value_vars=df.columns[2:])

이제 데이터는 다음과 같습니다.

    Date    Station variable    value
0   2018-01-01  O   0   0.340432
1   2018-01-01  E   0   0.865012
2   2018-01-01  L   0   0.994935
3   2018-01-02  O   0   0.274560
4   2018-01-02  E   0   0.096046

다음으로 날짜 및 변수 (이전 열 0-23)에서 새 날짜 열을 만들어야합니다.

melted['Date2'] = melted['Date'] + pd.to_timedelta(melted['variable'].astype(int), unit='hours')

마지막으로 스테이션을 열로 사용하는 피벗 테이블을 만듭니다.

melted.pivot_table(index='Date2', columns='Station', values='value')

이제 데이터는 다음과 같습니다.

Station                E           L           O
Date2           
2018-01-01 00:00:00 0.865012    0.994935    0.340432
2018-01-01 01:00:00 0.167927    0.605892    0.271139
2018-01-01 02:00:00 0.314101    0.473481    0.036693
2018-01-01 03:00:00 0.060521    0.462390    0.073077
2018-01-01 04:00:00 0.799032    0.420461    0.52114

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관