熊猫根据函数中的值创建一个新的概率列

时间:2018-09-19 14:34:17

标签: pandas function dataframe scipy

我正在尝试使用下面的函数创建一个新的概率列。我的df是一个时间序列,因此需要按从索引0len(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

1 个答案:

答案 0 :(得分:1)

我用valgrind --tool=callgrind ./program 1 > /dev/null完成了此操作,但是我必须摆脱time_delta索引,然后再添加。

在您拥有assign的poisson.pmf()中,您的值也存在问题,但是您需要在其中添加1,因为在python中索引从0开始。

λ_A*index