gpt4 book ai didi

python - 如何根据年份在 Pandas 数据框中创建多个列

转载 作者:行者123 更新时间:2023-12-04 10:14:19 24 4
gpt4 key购买 nike

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

输入:

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

最佳答案

先转换Obs_date到日期时间 to_datetime ,然后通过 Series.dt.year 创建新列和自定义格式 Series.dt.strftime 最后一次旋转 DataFrame.pivot 通过 DataFrame.reset_index 将索引转换为列和 DataFrame.rename_axis 用于删除列名:

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

或者可以创建系列 yd并通过 DataFrame.set_index reshape 与 Series.unstack :
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

如果以后需要处理数据并且需要正确的顺序,最好将 datetime 转换为 DatetimeIndex带有 29.February 的一些默认年份,例如 2020 :
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

关于python - 如何根据年份在 Pandas 数据框中创建多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61154036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com