【发布时间】:2022-01-18 07:42:48
【问题描述】:
当创建一个函数并使用rolling( ) 和apply( ) 来计算滚动的3 天百分位数分布时,它会在前3 天之后显示0,用于列的其余部分。
我假设具有 NaN 值的前 2 天没有用于计算百分位函数,因此可能将其余列默认为零,并错误地在第三天给出 33 值.但我不确定。
我一直在尝试解决这个问题,但没有任何解决方案。有谁知道为什么以及如何解决下面的正确代码?将不胜感激。
import pandas as pd
import numpy as np
from scipy import stats
data = { 'a': [1, 15, 27, 399, 17, 568, 200, 9],
'b': [2, 30, 15, 60, 15, 80, 53, 41],
'c': [100,200, 3, 78, 25, 88, 300, 91],
'd': [4, 300, 400, 500, 23, 43, 9, 71]
}
dfgrass = pd.DataFrame(data)
def percnum(x):
for t in dfgrass.index:
aaa = (x<=dfgrass.loc[t,'b']).value_counts()
ccc = (x<=dfgrass.loc[t, 'b']).values.sum()
vvv = len(x)
nnn = ccc/ vvv
return nnn * 100
dfgrass['e'] = dfgrass['b'].rolling(window=3).apply(percnum)
print(dfgrass)
【问题讨论】:
标签: python-3.x pandas dataframe rolling-computation percentile