У меня есть фрейм данных с двумя столбцами, например:
| index | class1 | class2 |
|-------|--------|--------|
| 0 | a | z |
| 1 | a | z |
| 2 | a | y |
| 3 | b | x |
| 4 | b | y |
| 5 | b | x |
| 6 | c | z |
| 7 | c | z |
| 8 | c | x |
Я хочу рассчитать статистику по одному классу за два. В результате я ожидаю таблицу с одним классом в виде строк, вторым классом в виде столбцов и значений на пересечении. В моем случае может быть большое количество классов как в class1
, так и в class2
. Поэтому в столбцах должны быть только вершины объектов class2 в соответствующем классе 1
. В качестве примера выведите:
| | a | | b | | c |
|---|------|---|------|---|------|
| x | 0 | | 0.33 | | 0.33 |
| | | | | | |
| y | 0.33 | | 0.33 | | 0 |
| | | | | | |
| z | 0.66 | | 0.33 | | 0.66 |
Мне нравится делать это, используя crosstab
fun c:
pd.crosstab(index=df['class1'],
columns=df['class2'],
normalize='index')
Вопрос:
Как оставить только классы top class2 всеми классами class1? Также есть какие-нибудь идеи, как сделать агрегацию кроме croostab?