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

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

如何根據年份在熊貓數據幀中創建多個列

如何根據年份在熊貓數據幀中創建多個列

一只斗牛犬 2022-10-05 09:23:06
我有10年的每小時水位數據,我試圖根據年份在單獨的列中排列。數據的當前格式分為兩列,一列用于讀數的日期和時間(例如 06/04/1989 06:00:00),另一列用于水位。我想根據年份將數據分成單獨的列。我認為這是一項簡單的任務,但由于我在熊貓方面的經驗有限,我發現它具有挑戰性。任何建議將不勝感激。輸入:Obs_date         SLEV(metres)31/12/1990 20:00    0.1531/12/1990 21:00    0.1431/12/1990 22:00    0.1331/12/1990 23:00    0.16...31/12/1991 20:00    0.1231/12/1991 21:00    0.1331/12/1991 22:00    0.0931/12/1991 23:00    0.08輸出:Obs_date          1990   1991   31-Dec 20:00:00   0.15   0.1231-Dec 21:00:00   0.14   0.1331-Dec 22:00:00   0.13   0.0931-Dec 23:00:00   0.16   0.08
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

首先按to_datetime轉換為日期時間,然后按系列.dt.年份創建新列,通過系列.dt.strftime創建自定義格式,最后通過DataFrame.pivot進行透視,并將索引轉換為列DataFrame.reset_index,DataFrame.rename_axis用于刪除列名稱:Obs_date

df['Obs_date'] = pd.to_datetime(df['Obs_date'], format='%d/%m/%Y %H:%M')

df['year'] = df['Obs_date'].dt.year

df['Obs_date'] = df['Obs_date'].dt.strftime('%d-%b %H:%M:%S')


df = df.pivot('Obs_date', 'year','SLEV(metres)').reset_index().rename_axis(None, axis=1)

print (df)

          Obs_date  1990  1991

0  31-Dec 20:00:00  0.15  0.12

1  31-Dec 21:00:00  0.14  0.13

2  31-Dec 22:00:00  0.13  0.09

3  31-Dec 23:00:00  0.16  0.08

或者可以創建系列,并通過DataFrame.set_index系列.unstack進行重塑:yd


df['Obs_date'] = pd.to_datetime(df['Obs_date'], format='%d/%m/%Y %H:%M')

y = df['Obs_date'].dt.year

d = df['Obs_date'].dt.strftime('%d-%b %H:%M:%S')


df = df.set_index([d, y])['SLEV(metres)'].unstack().reset_index().rename_axis(None, axis=1)

print (df)

          Obs_date  1990  1991

0  31-Dec 20:00:00  0.15  0.12

1  31-Dec 21:00:00  0.14  0.13

2  31-Dec 22:00:00  0.13  0.09

3  31-Dec 23:00:00  0.16  0.08

如果需要稍后處理數據并且需要正確的順序,最好將日期時間轉換為具有某些默認年份,例如:DatetimeIndex29.February2020


df['Obs_date'] = pd.to_datetime(df['Obs_date'], format='%d/%m/%Y %H:%M')

y = df['Obs_date'].dt.year

d = pd.to_datetime(df['Obs_date'].dt.strftime('2020-%m-%d %H:%M:%S'))


df = df.set_index([d, y])['SLEV(metres)'].unstack().rename_axis(None, axis=1)

print (df)

                     1990  1991

Obs_date                       

2020-12-31 20:00:00  0.15  0.12

2020-12-31 21:00:00  0.14  0.13

2020-12-31 22:00:00  0.13  0.09

2020-12-31 23:00:00  0.16  0.08


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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