Панды создают новый столбец вероятности на основе значений из функции - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь создать новый столбец вероятности, используя функцию ниже.Мой 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

1 Ответ

0 голосов
/ 21 сентября 2018

Я сделал это с assign, но мне пришлось избавиться от индекса time_delta, а затем добавить его позже.

Также была проблема с вашими значениями внутри poisson.pmf (), которая была у вас λ_A*index но вам нужно добавить 1 к этому, потому что индекс начинается с 0 в python.

λ_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}
df = pd.DataFrame(d)

df = df.assign(poiss_A = poisson.pmf(df['A'], λ_A * (df['A'].index + 1) / len(df)))
df = df.assign(poiss_b = poisson.pmf(df['B'], λ_B * (df['B'].index + 1) / len(df))) 

df
Out[125]: 
   A  B   poiss_A   poiss_b
0  0  0  0.449329  0.367879
1  0  0  0.201897  0.135335
2  0  1  0.090718  0.149361
3  1  1  0.130439  0.073263
4  0  0  0.018316  0.006738

Time_Interval = pd.timedelta_range('11:00:00', periods=5, freq='10T')
df.index = Time_Interval   

df
Out[128]: 
          A  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...