gpt4 book ai didi

python - 在多个groupby组中包含一行

转载 作者:行者123 更新时间:2023-12-01 15:36:55 25 4
gpt4 key购买 nike

我正在按小时对时间序列进行分组,以分别对每个小时的数据执行操作:

import pandas as pd
from datetime import datetime, timedelta

x = [2, 2, 4, 2, 2, 0]
idx = pd.date_range(
start=datetime(2019, 1, 1),
end=datetime(2019, 1, 1, 2, 30),
freq=timedelta(minutes=30),
)

s = pd.Series(x, index=idx)
hourly = s.groupby(lambda x: x.hour)

print(s)
print("summed:")
print(hourly.sum())

产生:

2019-01-01 00:00:00    2
2019-01-01 00:30:00 2
2019-01-01 01:00:00 4
2019-01-01 01:30:00 2
2019-01-01 02:00:00 2
2019-01-01 02:30:00 0
Freq: 30T, dtype: int64
summed:
0 4
1 6
2 2
dtype: int64

正如预期的那样。

我现在想知道每小时时间序列下的面积,我可以使用 numpy.trapz :

import numpy as np

def series_trapz(series):
hours = [i.timestamp() / 3600 for i in series.index]
return np.trapz(series, x=hours)

print("Area under curve")
print(hourly.agg(series_trapz))

但要使其正常工作,组之间的边界必须出现在两个组中!

例如,第一组必须是:

2019-01-01 00:00:00    2
2019-01-01 00:30:00 2
2019-01-01 01:00:00 4

第二组必须是

2019-01-01 01:00:00    4
2019-01-01 01:30:00 2
2019-01-01 02:00:00 2

等等

这完全有可能使用 pandas.groupby 吗?

最佳答案

我不认为你的 np.trapz 逻辑在这里完全正确,但我认为你可以通过 .rolling(..., closed= "both") 以便始终包括区间的端点:

In [366]: s.rolling("1H", closed="both").apply(np.trapz).iloc[::2]
Out[366]:
2019-01-01 00:00:00 0.0
2019-01-01 01:00:00 5.0
2019-01-01 02:00:00 5.0
Freq: 60T, dtype: float64

关于python - 在多个groupby组中包含一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59093676/

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