Учитывая приведенные ниже примеры данных, я пытаюсь вычислить условные вероятности.Столбцы представляют события AE, произошедшие в последовательности (S1, S2 ...).
Первые два примера работают, как ожидается, и вычисляют P (S2 | S1) и P (S2, S3 | S1).Подход нарушается, когда условие включает в себя несколько столбцов, как в примере три, который, как я ожидал, вычислит P (S3 | S1, S2).
Я был бы признателен за понимание того, почему это не работает, и чтоАльтернативный метод может получить желаемый результат P (S3 | S1, S2).Например, я ожидаю, что выходные данные будут включать строки A,D,B,0.25
и A,D,C,0.75
.
Спасибо!
Код MWE:
import pandas as pd
data = { 'S1' : ['A','A','A','B','B','A','A'],
'S2' : ['B','D','D','A','D','D','D'],
'S3' : ['C','C','C','D','C','B','C'],
'S4' : ['D','B','E','C','A','C','E'] }
df = pd.DataFrame(data)
print (df)
print ((df.groupby(['S1','S2']).agg({'S4':'count'}) /
df.groupby('S1').agg({'S4':'count'})).rename(columns={'S4':'Freq'}))
print ((df.groupby(['S1','S2','S3']).agg({'S4':'count'}) /
df.groupby('S1').agg({'S4':'count'})).rename(columns={'S4':'Freq'}))
print ((df.groupby(['S1','S2','S3']).agg({'S4':'count'}) /
df.groupby(['S1','S2']).agg({'S4':'count'})).rename(columns={'S4':'Freq'}))
Выходные данные:
S1 S2 S3 S4
0 A B C D
1 A D C B
2 A D C E
3 B A D C
4 B D C A
5 A D B C
6 A D C E
Freq
S1 S2
A B 0.2
D 0.8
B A 0.5
D 0.5
Freq
S1 S2 S3
A B C 0.2
D B 0.2
C 0.6
B A D 0.5
D C 0.5
Traceback (most recent call last):
File "test.py", line 13, in <module>
print ((df.groupby(['S1','S2','S3']).agg({'S4':'count'}) / df.groupby(['S1','S2']).agg({'S4':'count'})).rename(columns={'S4':'Freq'}))
NotImplementedError: merging with more than one level overlap on a multi-index is not implemented