重采样 pandas 数据框并将结果放入列中,以日期为索引
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'))
对数据进行分组
但我随后希望将组的内容放在第 1-48 列中,因此生成的数据集的每一行在左侧都有一天,在右侧有 48 个幂条目。
原始数据
2016-06-01 00:00:00 5<br>
2016-06-01 00:30:00 9<br>
2016-06-01 01:00:00 12
目标
日期时间 00:00:00 00:30:00 01:00:00<br>
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
或者,使用 groupby
而不是 set_index
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
我有一个数据集,每 30 分钟就有一次电量。
它以时间戳为索引,格式为 2016-06-01 00:00:00 2016-06-01 00:00:00等
我可以使用 df.groupby(pf.TimeGrouper(freq='D'))
对数据进行分组
但我随后希望将组的内容放在第 1-48 列中,因此生成的数据集的每一行在左侧都有一天,在右侧有 48 个幂条目。
原始数据
2016-06-01 00:00:00 5<br>
2016-06-01 00:30:00 9<br>
2016-06-01 01:00:00 12
目标
日期时间 00:00:00 00:30:00 01:00:00<br>
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
或者,使用 groupby
set_index
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