gpt4 book ai didi

python - 列表中正值的 python 滚动窗口

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:28 25 4
gpt4 key购买 nike

什么是计算列表均值但只考虑正值的 pythonic 方法?

所以如果我有值(value)观[1,2,3,4,5,-1,4,2,3] 我想计算三个值的滚动平均值它基本上是计算 [1,2,3,4,5 的平均滚动平均值,'南',4,2,3]。那变成了[nan,2,3,4,4.5,4.5,3,nan] 其中第一个和最后一个 nan 是由于缺少元素。2 = 均值 ([1,2,3])3 = 均值 ([2,3,4])但是 4.5 = mean ([4,5,nan])=mean ([4,5])等等。因此,重要的是当存在负值时将它们排除在外,但除以正值的数量。

我试过:

def RollingPositiveAverage(listA,nElements):
listB=[element for element in listA if element>0]
return pd.rolling_mean(listB,3)

但是列表 B 缺少元素。我试图用 nan 替换这些元素,但平均值变成了 nan 本身。

有什么好的优雅的方法可以解决这个问题吗?

谢谢

最佳答案

由于您使用的是 Pandas:

import numpy as np
import pandas as pd

def RollingPositiveAverage(listA, window=3):
s = pd.Series(listA)
s[s < 0] = np.nan
result = s.rolling(window, center=True, min_periods=1).mean()
result.iloc[:window // 2] = np.nan
result.iloc[-(window // 2):] = np.nan
return result # or result.values or list(result) if you prefer array or list

print(RollingPositiveAverage([1, 2, 3, 4, 5, -1, 4, 2, 3]))

输出:

0    NaN
1 2.0
2 3.0
3 4.0
4 4.5
5 4.5
6 3.0
7 3.0
8 NaN
dtype: float64

纯 Python 版本:

import math

def RollingPositiveAverage(listA, window=3):
result = [math.nan] * (window // 2)
for win in zip(*(listA[i:] for i in range(window))):
win = tuple(v for v in win if v >= 0)
result.append(float(sum(win)) / min(len(win), 1))
result.extend([math.nan] * (window // 2))
return result

print(RollingPositiveAverage([1, 2, 3, 4, 5, -1, 4, 2, 3]))

输出:

[nan, 2.0, 3.0, 4.0, 4.5, 4.5, 3.0, 3.0, nan]

关于python - 列表中正值的 python 滚动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49447911/

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