gpt4 book ai didi

python - 在具有非唯一日期索引的数据帧上计算滚动中位数

转载 作者:行者123 更新时间:2023-12-04 08:11:30 25 4
gpt4 key购买 nike

我有以下数据框,它具有使用日期的非唯一索引:

                column
2019-01-07 NaN
2019-01-08 NaN
2019-01-08 0.02
2019-01-09 31.45
2019-01-10 NaN
2019-01-10 71.87
2019-01-10 90.18
2019-01-11 NaN
2019-01-12 12.67
2019-01-12 5.68
2019-01-12 11.23
2019-01-12 21.67
2019-01-12 14.77
2019-01-12 5.18
2019-01-13 14.38
2019-01-13 NaN
2019-01-13 71.13
2019-01-13 20.02
2019-01-13 103.10
2019-01-14 NaN
2019-01-15 32.48
2019-01-16 37.37
2019-01-16 31.05
2019-01-16 7.00
2019-01-17 NaN
2019-01-17 39.65
2019-01-18 23.68
2019-01-18 0.08
2019-01-18 41.35
2019-01-19 NaN
2019-01-19 45.85
2019-01-19 3.98
2019-01-19 4.60
2019-01-19 NaN
2019-01-19 NaN
2019-01-20 3.60
2019-01-20 5.03
2019-01-20 15.70
我的目标是使用每个日期的所有值计算 7 天滚动中位数,但忽略 NaN 值。
生成的数据框应该有一个唯一的日期索引,滚动中位数作为该日期的列值,类似于以下内容:
                column
2019-01-13 17.40
2019-01-14 17.40
2019-01-15 20.85
2019-01-16 20.85
2019-01-17 20.02
2019-01-18 20.85
2019-01-19 31.05
2019-01-20 19.69
我不确定如何使用 Pandas 轻松实现这一点,所以如果有人能提供答案或指出我正确的方向,我们将不胜感激。
编辑
为了让事情更清楚,我将解释如何计算单个日期的中位数。
使用日期 2019-01-13,滚动中位数将需要使用所有值,不包括 NaN 值,从第 7 天到第 13 天。这意味着需要包含在第 13 位的中位数计算中的值是 0.02、31.45、71.87、90.18、12.67、5.68、11.23、21.67、14.77、5.18、14.38、2103、7103 13 日的结果中位数为 17.4。
希望有帮助。

最佳答案

一个 rolling对象是可迭代的,它允许这样的解决方案:

# drop NAs and group by date into lists of values
df_per_date = df.dropna().groupby('date').apply(lambda g: g.value.to_list())


# compute medians across windows ('sum' concatenates multiple lists into one list)
medians = [np.median(window.agg(sum)) for window in df_per_date.rolling(5)]


# result
medians = pd.Series(index=df_per_date.index, data=medians)


medians
enter image description here

顺便说一下,我是这样加载数据的:
# load the data
df = pd.read_csv(pd.io.common.StringIO("""
2019-01-07 NaN
2019-01-08 NaN
2019-01-08 0.02
2019-01-09 31.45
2019-01-10 NaN
2019-01-10 71.87
2019-01-10 90.18
2019-01-11 NaN
2019-01-12 12.67
2019-01-12 5.68
2019-01-12 11.23
2019-01-12 21.67
2019-01-12 14.77
2019-01-12 5.18
2019-01-13 14.38
2019-01-13 NaN
2019-01-13 71.13
2019-01-13 20.02
2019-01-13 103.10
2019-01-14 NaN
2019-01-15 32.48
2019-01-16 37.37
2019-01-16 31.05
2019-01-16 7.00
2019-01-17 NaN
2019-01-17 39.65
2019-01-18 23.68
2019-01-18 0.08
2019-01-18 41.35
2019-01-19 NaN
2019-01-19 45.85
2019-01-19 3.98
2019-01-19 4.60
2019-01-19 NaN
2019-01-19 NaN
2019-01-20 3.60
2019-01-20 5.03
2019-01-20 15.70
""".strip()), sep='\s+', names=['date', 'value'], parse_dates=['date'])

关于python - 在具有非唯一日期索引的数据帧上计算滚动中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65929683/

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