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
添加回答
举报