【发布时间】:2021-11-11 07:23:19
【问题描述】:
当前df:
Date Power
2011-04-18 17:00:01 245.83
2011-04-18 17:00:02 246.02
2011-04-18 17:00:03 245.72
2011-04-18 17:00:04 244.71
2011-04-18 17:00:05 245.93
2011-04-18 17:00:06 243.12
2011-04-18 17:00:07 244.72
2011-04-18 17:00:08 242.44
2011-04-18 17:00:09 246.42
2011-04-18 17:00:10 245.02
... ...
我想将上述数据框拆分为大小为 n=4(大小可变)和 o=75 重叠的窗口。这意味着 75% 的窗口将在前一个窗口和下一个窗口之间共享。在这个例子中,由于 n=4 的 75% 是 3,我希望窗口每 1 秒向右滑动一次(3 秒将是常见的重叠或 75%)。我想创建以下df。
date start date end power
0 2011-04-18 17:00:01 2011-04-18 17:00:04 [245.83, 246.02, 245.72, 244.71]
1 2011-04-18 17:00:02 2011-04-18 17:00:05 [246.02, 245.72, 244.71, 245.93]
2 2011-04-18 17:00:03 2011-04-18 17:00:06 [245.72, 244.71, 245.93, 243.12]
3 2011-04-18 17:00:04 2011-04-18 17:00:07 [244.71, 245.93, 243.12, 244.72]
4 2011-04-18 17:00:05 2011-04-18 17:00:08 [245.93, 243.12, 244.72, 242.44]
5 2011-04-18 17:00:06 2011-04-18 17:00:09 [243.12, 244.72, 242.44, 246.42]
6 2011-04-18 17:00:07 2011-04-18 17:00:10 [244.72, 242.44, 246.42, 245.02]
... ... ... ...
pandas 中是否有任何功能可以让您做到这一点?我搜索了文档,但找不到任何可以达到此目的的内容。
我能够使用以下方法将我的数据框变成大小为 n 的窗口,但我很难让窗口重叠。
def make_row(d):
return pd.Series({"date_start":d["Date"].min(), "date_end":d["Date"].max(), "power":d["Power"].to_list()})
df.groupby(np.floor(np.linspace(0,len(df)-1,len(df))/n)).apply(make_row).index.astype(int)
供参考,以上代码结果:
date_start date_end power
0 2011-04-18 17:00:01 2011-04-18 17:00:04 [245.83, 246.02, 245.72, 244.71]
1 2011-04-18 17:00:05 2011-04-18 17:00:08 [245.93, 243.12, 244.72, 242.44]
... ... ... ...
【问题讨论】:
-
日期是否总是增加 1 秒?这将大大简化问题
标签: python pandas dataframe date datetime