亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Python 中使用 Pandas 有效地將數據框重組為日期時間條目?

如何在 Python 中使用 Pandas 有效地將數據框重組為日期時間條目?

Go
尚方寶劍之說 2022-10-05 16:45:25
我有以下數據框:我希望它看起來像這樣(日期索引,站列):電臺的名稱并不重要,我不得不使用另一個文件來展示一個工作示例。第一個數據框有 0-23 列,代表一天中的幾個小時。它還在每一行中都有日期和車站(位置)信息。我需要讓索引(或一行)是一個日期時間,它結合了列中的小時和行中的日期。我需要每個站都是一列而不是存儲在行中。我使用下面的代碼來實現它,但是即使處理少量的行也需要很長時間。import osimport pandas as pdidx = pd.IndexSlicedf=pd.read_csv(os.path.join(filepath,newfilename)) # get datadf=df[df['POC']==1] #only keep primary intrument at each sitecols=['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 columnsdf_align1=pd.pivot_table(df,index='Date (LST)',columns=['Site AQS'])  #pivot data to easier viewozone_df=pd.DataFrame() #create ouput dffor 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=sharingPS:抱歉圖片不好,我使用的是遠程計算機,無法獲得好的屏幕截圖。
查看完整描述

1 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

您可以使用melt和pivot_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


查看完整回答
反對 回復 2022-10-05
  • 1 回答
  • 0 關注
  • 86 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號