簡體   English   中英

如何使用小時值和日期時間索引將寬格式轉換為長格式?

[英]How to convert wide to long format with hourly values and datetime index?

我正在從固定的SQL模式中以長格式檢索數據,並希望將其轉換為寬格式。

復雜的是,DataFrame中的每一行代表一天的產品值。 值存儲在代表一天中特定時間的列中。 下面的示例顯示了六個小時的間隔時間。 這意味着我們每天在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

我嘗試了樞軸,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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM