gpt4 book ai didi

python - 将日期/小时数据帧解压到带有日期时间索引的单列中 - python、pandas

转载 作者:行者123 更新时间:2023-12-01 06:30:40 25 4
gpt4 key购买 nike

我有一个像这样的数据框:

                  0       1       2       3       4       5       6       7       8       9       10    11       12      13      14      15      16      17      18      19      20      21      22      23
16.01.2018 25.45 24.99 24.68 25.00 26.19 28.96 35.78 44.66 41.75 41.58 41.48 41.66 40.66 40.39 40.33 40.73 41.58 45.06 45.84 42.69 39.56 35.4 33.27 29.49
17.01.2018 28.78 27.71 26.55 25.76 25.97 26.97 30.89 36.06 41.24 40.67 39.86 39.42 38.17 37.31 36.58 36.78 37.8 40.78 40.8 38.95 34.34 31.95 31.56 29.26

其中索引是某个值发生的日期,而列(从 0 到 23)表示小时。我想取消堆叠数据帧以获得日期时间索引和具有相应值的单列:

    16.01.2018 00:00:00  25.45
16.01.2018 01:00:00 24.99
16.01.2018 02:00:00 25.68
16.01.2018 03:00:00 25.00
....

目前我正在做的事情:

index = pd.date_range(start = df.index[0], periods=len(df.unstack()), freq='H')
new_df = pd.DataFrame(index=index)
for d in new_df.index.date:
for h in new_df.index.hour:
new_df['value'] = df.unstack()[h][d]

但是 for 循环需要很长时间......你有更好(更快)的解决方案吗?

最佳答案

将索引转换为DatetimeIndex,将列转换为timedelta,因此在通过 DataFrame.stack reshape 之后和 Series.reset_index仅对两个新列求和:

df.index = pd.to_datetime(df.index)
df.columns = pd.to_timedelta(df.columns + ':00:00')
df = df.stack().reset_index(name='data')
df.index = df.pop('level_0') + df.pop('level_1')
print (df.head())
data
2018-01-16 00:00:00 25.45
2018-01-16 01:00:00 24.99
2018-01-16 02:00:00 24.68
2018-01-16 03:00:00 25.00
2018-01-16 04:00:00 26.19

unstack 的解决方案类似,只是输出顺序不同:

df.index = pd.to_datetime(df.index)
df.columns = pd.to_timedelta(df.columns + ':00:00')
df = df.unstack().reset_index(name='data')
df.index = df.pop('level_1') + df.pop('level_0')
print (df.head())
data
2018-01-16 00:00:00 25.45
2018-01-17 00:00:00 28.78
2018-01-16 01:00:00 24.99
2018-01-17 01:00:00 27.71
2018-01-16 02:00:00 24.68

关于python - 将日期/小时数据帧解压到带有日期时间索引的单列中 - python、pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59927583/

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