Кросс-таблица на один столбец, где третий столбец сопоставляется - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь сделать кросс-таблицу на основе одного столбца, где совпадает третий столбец.Возьмите пример данных:

df = pd.DataFrame({'demographic' : ['A', 'B', 'B', 'A', 'C', 'C'],
                'id_match' : ['101', '101', '201', '201', '26', '26'],
                'time' : ['10', '10', '16', '16', '1', '1']})

, где id_match соответствует, я хочу найти итоговую сумму времени для кросс-таблицы демографического столбца.Вывод будет выглядеть так:

  A  B  C
A 0  52 0
B 52 0  0
C 0  0  2

Надеюсь, это имеет смысл, если нет, прокомментируйте.Спасибо J

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете решить эту проблему, используя merge и crosstab:

u = df.reset_index()
v = u.merge(u, on='id_match').query('index_x != index_y')
r = pd.crosstab(v.demographic_x, 
                v.demographic_y, 
                v.time_x.astype(int) + v.time_y.astype(int), 
                aggfunc='sum')

print(r)
demographic_y     A     B    C
demographic_x                 
A               NaN  52.0  NaN
B              52.0   NaN  NaN
C               NaN   NaN  4.0

Если вам нужны NaN, заполненные нулями, вы можете использовать fillna:

r.fillna(0, downcast='infer')

demographic_y   A   B  C
demographic_x           
A               0  52  0
B              52   0  0
C               0   0  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...