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進行
重塑:y
d
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
添加回答
舉報