gpt4 book ai didi

python - 如何使用小时值和日期时间索引将宽格式转换为长格式?

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:14 26 4
gpt4 key购买 nike

我正在从长格式的固定 SQL 模式中检索数据,并希望将其转换为宽格式。

复杂的是,DataFrame 中的每一行都代表一天中产品的值(value)。值存储在代表一天中特定时间的列中。下面的示例显示了六个小时的间隔长度。这意味着我们每天在 00:00、06:00、12:00 和 18:00 存储四个值。DataFrame 如下所示:

      id        date  0000  0600  1200  1800
0 APPL 01.01.2014 12 15 17 19
1 APPL 02.01.2014 21 23 25 27
2 MSFT 01.01.2014 1 2 3 4
3 MSFT 02.01.2014 5 6 7 8

我想以宽格式实现的 DataFrame 是:

                     APPL  MSFT
2014-01-01 00:00:00 12 1
2014-01-01 06:00:00 15 2
2014-01-01 12:00:00 17 3
2014-01-01 18:00:00 19 4
2014-01-02 00:00:00 21 5
2014-01-02 06:00:00 23 6
2014-01-02 12:00:00 25 7
2014-01-02 18:00:00 27 8

我尝试了 pivot、un/stack 和 set_index 的各种组合来实现目标结构,但都失败了。我最接近的是使用:

df = src.set_index(['date','id']).stack()

返回:

date        id        
01.01.2014 APPL 0000 12
0600 15
1200 17
1800 19
02.01.2014 APPL 0000 21
0600 23
1200 25
1800 27
01.01.2014 MSFT 0000 1
0600 2
1200 3
1800 4
02.01.2014 MSFT 0000 5
0600 6
1200 7
1800 8

但我知道我无法解析 MultiIndex。

非常感谢任何帮助。

最佳答案

import pandas as pd
import io

text = """ id date 0000 0600 1200 1800
0 APPL 01.01.2014 12 15 17 19
1 APPL 02.01.2014 21 23 25 27
2 MSFT 01.01.2014 1 2 3 4
3 MSFT 02.01.2014 5 6 7 8"""

df = pd.read_csv(io.BytesIO(text), delim_whitespace=True)
df = df.set_index(["id", "date"]).stack().unstack(0)

def f(key):
date, hour = key
time = "{} {}:{}:00".format(date, hour[:2], hour[2:])
return pd.to_datetime(time, dayfirst=True)

df.index = df.index.map(f)
print df

输出:

id                   APPL  MSFT
2014-01-01 00:00:00 12 1
2014-01-01 06:00:00 15 2
2014-01-01 12:00:00 17 3
2014-01-01 18:00:00 19 4
2014-01-02 00:00:00 21 5
2014-01-02 06:00:00 23 6
2014-01-02 12:00:00 25 7
2014-01-02 18:00:00 27 8

关于python - 如何使用小时值和日期时间索引将宽格式转换为长格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25074214/

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