gpt4 book ai didi

python - 如何在不进行双重重采样的情况下在重采样之前预过滤到每组的最小行数?

转载 作者:行者123 更新时间:2023-12-05 08:36:06 25 4
gpt4 key购买 nike

这是我实际用例的模拟,假设我有以下内容:

import pandas as pd
import numpy as np

df = pd.DataFrame(data=np.arange(1, 32),
columns=['a'],
index=pd.date_range('2021-01-01', '2021-01-31'))

我想在应用函数之前将重采样组预过滤到最少的 X 行数。我可以找到每个重采样组的行数,如下所示:

df.resample('W').apply(lambda x: x.shape[0])
> a
> 2021-01-03 3
> 2021-01-10 7
> 2021-01-17 7
> 2021-01-24 7
> 2021-01-31 7

在上面的示例中,我想运行重采样排除或过滤掉与日期 2021-01-03 对应的子组,因为它只有 3 行、周期或天。

例如,所需的输出是取均值,它应该排除 2021-01-03 的情况,但在应用实际功能之前,而不是之后:

df.resample('W').filter_here_to_min_7_rows().apply(lambda x: x.mean())
> a
> 2021-01-10 7
> 2021-01-17 14
> 2021-01-24 21
> 2021-01-31 28

更新 更多上下文,我为什么需要这个?在我的实际用例中,apply 函数要复杂得多,如果不满足最小行数,我需要处理提供空结果的边界情况,这会影响聚合的重采样类型结果。因此,我更愿意让应用函数获得正确的输入组。

最佳答案

您可以使用 loc使用可调用函数来过滤聚合行:

df.resample('W')['a'].agg(['count', 'mean']).loc[lambda df: df['count'] >= 7, 'mean']

关于python - 如何在不进行双重重采样的情况下在重采样之前预过滤到每组的最小行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70680572/

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