Как создать таблицу на случай непредвиденных обстоятельств с помощью панд? - PullRequest
0 голосов
/ 30 апреля 2018

Допустим, у меня есть такие данные:

+-------+--------+--------------+--------+--------------+
| index | used_x | clicked_in_x | used_y | clicked_in_y |
+-------+--------+--------------+--------+--------------+
|     1 | True   | False        | True   | True         |
|     2 | False  | False        | True   | False        |
|     3 | True   | True         | False  | False        |
+-------+--------+--------------+--------+--------------+

И я хотел бы создать таблицу на случай непредвиденных обстоятельств, используя панд, которая показывает такую ​​таблицу:

+--------+----------------+----------------+
|        | clicked_from_x | clicked_from_y |
+--------+----------------+----------------+
| used_x |             40 |              3 |
| used_y |              2 |             10 |
+--------+----------------+----------------+

Каков наилучший способ достичь этого? До сих пор я пробовал следующее, используя метод crosstab:

import numpy as np
import pandas as pd

size = 20

df = pd.DataFrame({
    'used_x': np.random.choice(a=[False, True], size=size),
    'clicked_from_x': np.random.choice(a=[False, True], size=size),
    'used_y':  np.random.choice(a=[False, True], size=size),
    'clicked_from_y':  np.random.choice(a=[False, True], size=size),
})

pd.crosstab([df['used_x'], df['used_y']], [df['clicked_from_x'], df['clicked_from_y']],  margins=False)

Что дает:

enter image description here

Но это довольно сложно понять, а не представление, на которое я надеялся. Кто-нибудь знает, как получить желаемый результат или, возможно, эквивалентную стратегию с использованием панд?

1 Ответ

0 голосов
/ 30 апреля 2018

Мы будем использовать всемогущую подпрограмму dot product здесь.

i = df.filter(like='clicked')
j = df.filter(like='used')

j.astype(int).T.dot(i)

        clicked_from_x  clicked_from_y
used_x               6               5
used_y               6               6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...