我正在尝试使用下面的函数创建一个新的概率列。我的df是一个时间序列,因此需要按从索引0
到len(df)
的顺序计算泊松概率函数。但是我继续遇到以下错误。
TypeError: ("argument of type 'numpy.int32' is not iterable", 'occurred at index 0 days 11:00:00')
from scipy.stats import poisson
λ_A = 4.0
λ_B = 5.0
a = np.array([0,0,0,1,0])
b = np.array([0,0,1,1,0])
d = {'A':a, 'B':b}
Time_Interval = pd.timedelta_range('11:00:00', periods=5, freq='10T')
df = pd.DataFrame(d, Time_Interval)
这是我的尝试。
def colFunc(row):
adj_A=[]
for index, item in enumerate(df['A']):
if index in row['A'] == 0:
return adj_A.append(poisson.pmf(0, λ_A*index/len(df)))
else:
return adj_A.append(poisson.pmf(1, λ_A*index/len(df)))
return adj_A
df['poiss_A'] = df.apply(colFunc, axis=1)
df['poiss_B'] = df.apply(colFunc, axis=1)...with λ_B replacing λ_A.
这就是我的追求。
df
Out[358]:
Rest_A Rest_B poiss_A poiss_B
11:00:00 0 0 0.449329 0.367879
11:10:00 0 0 0.201897 0.135335
11:20:00 0 1 0.090718 0.149361
11:30:00 1 1 0.130439 0.073263
11:40:00 0 0 0.018316 0.006738
答案 0 :(得分:1)
我用valgrind --tool=callgrind ./program 1 > /dev/null
完成了此操作,但是我必须摆脱time_delta索引,然后再添加。
在您拥有assign
的poisson.pmf()中,您的值也存在问题,但是您需要在其中添加1,因为在python中索引从0开始。
λ_A*index