Я пытаюсь создать два новых столбца распределения вероятностей для A и B, которые должны следовать временному ряду (проиндексированному здесь).
from scipy.stats import poisson
from datetime import timedelta
import pandas as pd
import numpy as np
p = 4.0
q = 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)
Новый столбец A '(соответствующий A) генерируется следующим образом .
so when i = 1 ==> poisson.pmf(0, p*1/5)
i = 2 ==> poisson.pmf(0, p*2/5)
i = 3 ==> poisson.pmf(0, p*3/5)
i = 4 ==> poisson.pmf(1, p*4/5)
i = 5 ==> poisson.pmf(0, p*5/5)
Я попробовал следующий способ.
df["A'"] = df.A.apply(lambda v : poisson.pmf(v, p*i/len(df)) for i in list(range(1,1+len(df['A']))))
df["B'"] = df.B.apply(lambda x : poisson.pmf(x, q*j/len(df)) for j in list(range(1,1+len(df['B']))))
## list(range(1, len(df['A']))) creates the index i for the i/len(df) term inside the poisson func. for i [1,2,3,4,5].
Но я получу следующую ошибку.
TypeError: 'generator' object is not callable
Результат должен выглядеть следующим образом
df
Out[358]:
A B A' 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