猿问

如何根据年份在熊猫数据帧中创建多个列

我有10年的每小时水位数据,我试图根据年份在单独的列中排列。数据的当前格式分为两列,一列用于读数的日期和时间(例如 06/04/1989 06:00:00),另一列用于水位。我想根据年份将数据分成单独的列。我认为这是一项简单的任务,但由于我在熊猫方面的经验有限,我发现它具有挑战性。任何建议将不胜感激。


输入:


Obs_date         SLEV(metres)


31/12/1990 20:00    0.15

31/12/1990 21:00    0.14

31/12/1990 22:00    0.13

31/12/1990 23:00    0.16

...

31/12/1991 20:00    0.12

31/12/1991 21:00    0.13

31/12/1991 22:00    0.09

31/12/1991 23:00    0.08

输出:


Obs_date          1990   1991   

31-Dec 20:00:00   0.15   0.12

31-Dec 21:00:00   0.14   0.13

31-Dec 22:00:00   0.13   0.09

31-Dec 23:00:00   0.16   0.08


一只斗牛犬
浏览 91回答 1
1回答

繁花如伊

首先按to_datetime转换为日期时间,然后按系列.dt.年份创建新列,通过系列.dt.strftime创建自定义格式,最后通过DataFrame.pivot进行透视,并将索引转换为列DataFrame.reset_index,DataFrame.rename_axis用于删除列名称:Obs_datedf['Obs_date'] = pd.to_datetime(df['Obs_date'], format='%d/%m/%Y %H:%M')df['year'] = df['Obs_date'].dt.yeardf['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  19910  31-Dec 20:00:00  0.15  0.121  31-Dec 21:00:00  0.14  0.132  31-Dec 22:00:00  0.13  0.093  31-Dec 23:00:00  0.16  0.08或者可以创建系列,并通过DataFrame.set_index系列.unstack进行重塑:yddf['Obs_date'] = pd.to_datetime(df['Obs_date'], format='%d/%m/%Y %H:%M')y = df['Obs_date'].dt.yeard = 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  19910  31-Dec 20:00:00  0.15  0.121  31-Dec 21:00:00  0.14  0.132  31-Dec 22:00:00  0.13  0.093  31-Dec 23:00:00  0.16  0.08如果需要稍后处理数据并且需要正确的顺序,最好将日期时间转换为具有某些默认年份,例如:DatetimeIndex29.February2020df['Obs_date'] = pd.to_datetime(df['Obs_date'], format='%d/%m/%Y %H:%M')y = df['Obs_date'].dt.yeard = 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  1991Obs_date                       2020-12-31 20:00:00  0.15  0.122020-12-31 21:00:00  0.14  0.132020-12-31 22:00:00  0.13  0.092020-12-31 23:00:00  0.16  0.08
随时随地看视频慕课网APP

相关分类

Python
我要回答