Предположим, я составил следующую кросс-таблицу:

foo = pd.Categorical(['a', 'b'], categories=['a', 'b', 'c'])
bar = pd.Categorical(['d', 'e'], categories=['d', 'e', 'f'])
pd.crosstab(foo, bar)

Что дает:

col_0  d  e
row_0      
a      1  0
b      0  1

Я хочу преобразовать приведенное выше в одну сложенную таблицу, чтобы получить:

  row_0  tot d  tot e
0     a      1      0
1     b      0      1

А именно заголовок столбца d и e изменен на tot d, а tot e и row_0 теперь является столбцом. Пока что я делаю это, сохраняя версию с кросс-таблицей в Excel, вручную налагаю изменения и импортирую их. Но я уверен, что должен быть более эффективный способ сделать это?

1
Wiliam 2 Мар 2021 в 12:13

1 ответ

Лучший ответ

Используйте DataFrame.add_prefix с помощью DataFrame.reset_index и последний DataFrame.rename_axis :

df = pd.crosstab(foo, bar)
   
df = df.add_prefix('tot ').reset_index().rename_axis(None, axis=1) 
print (df)
  row_0  tot d  tot e
0     a      1      0
1     b      0      1
1
jezrael 2 Мар 2021 в 09:15