Pandas Groupby ошибка на разделение - PullRequest
0 голосов
/ 02 июня 2018

Учитывая приведенные ниже примеры данных, я пытаюсь вычислить условные вероятности.Столбцы представляют события 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...