擅长:python、mysql、java
<p>既然你用的是熊猫:</p>
<pre><code>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]))
</code></pre>
<p>输出:</p>
^{pr2}$
<hr/>
<p>纯Python版本:</p>
<pre><code>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]))
</code></pre>
<p>输出:</p>
<pre><code>[nan, 2.0, 3.0, 4.0, 4.5, 4.5, 3.0, 3.0, nan]
</code></pre>