簡體   English   中英

重新采樣熊貓數據框並將結果放入列中,以天為索引

[英]Resampling pandas dataframe and putting the results in columns, with the day as the index

我有一個每30分鍾具有功能的數據集。

它具有時間戳作為索引,格式為2016-06-01 00:00:00 2016-06-01 00:00:00等

我可以使用df.groupby(pf.TimeGrouper(freq='D'))對數據進行df.groupby(pf.TimeGrouper(freq='D'))但隨后我希望將該組的內容放在第1-48列中,因此結果數據集的每一行都有一天在左邊是48個電源輸入,右邊是48個電源輸入。

原始數據

2016-06-01 00:00:00 5
2016-06-01 00:30:00 9
2016-06-01 01:00:00 12

目標

DATETIME 00:00:00 00:30:00 01:00:00
2016-06-01 5 9 12

我確定必須有一條規則可以用於添加到timegrouper行的末尾,例如,將所有值列出來並將它們轉置為一行?

示例數據:

import pandas as pd

times = ["2016-06-01 00:00:00", "2016-06-01 00:30:00", "2016-06-01 01:00:00"]
vals = [5, 9, 12]
df = pd.DataFrame(dict(time = times, value = vals))

將時間分為日期和時間:

df["time"] = pd.to_datetime(df.time)
df["date"] = df.time.dt.date
df["time"] = df.time.dt.time

       time  value        date
0  00:00:00      5  2016-06-01
1  00:30:00      9  2016-06-01
2  01:00:00     12  2016-06-01

然后旋轉數據:

df.pivot(index="date", columns="time", values="value")

time        00:00:00  00:30:00  01:00:00
date                                
2016-06-01         5         9        12

你可以

In [881]: df.set_index([df.time.dt.date, df.time.dt.time])['value'].unstack()
Out[881]:
time        00:00:00  00:30:00  01:00:00
time
2016-06-01         5         9        12

重命名軸

In [903]: (df.set_index([df.time.dt.date, df.time.dt.time])['value'].unstack()
             .rename_axis(None).rename_axis('DATETIME', 1))
Out[903]:
DATETIME    00:00:00  00:30:00  01:00:00
2016-06-01         5         9        12

或者,代替set_index使用groupby

In [907]: df.groupby([df.time.dt.date, df.time.dt.time])['value'].sum().unstack()
Out[907]:
time        00:00:00  00:30:00  01:00:00
time
2016-06-01         5         9        12

暫無
暫無

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

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