Кадр данных Pandas в дублированную матрицу в сумме величин

1
import pandas as pd
data = {0: {'ID': 'A', 'Qty': 1, 'Type': 'SVGA'},
 1: {'ID': 'B', 'Qty': 2, 'Type': 'SVGA'},
 2: {'ID': 'B', 'Qty': 2, 'Type': 'XGA'},
 3: {'ID': 'C', 'Qty': 3, 'Type': 'XGA'},
 4: {'ID': 'D', 'Qty': 4, 'Type': 'XGA'},
 5: {'ID': 'A', 'Qty': 1, 'Type': 'LED'},
 6: {'ID': 'C', 'Qty': 3, 'Type': 'LED'}}
df = pd.DataFrame.from_dict(data, orient='index')

Возможно ли преобразовать этот блок данных в дублируемую матрицу в сумме.

Ожидаемый результат:

        LED  SVGA  XGA                
LED       4     1    3
SVGA      1     3    2
XGA       3     2    9
Теги:
pandas
dataframe

1 ответ

1
Лучший ответ

Кажется, что ключ здесь - столбец "ID", потому что значение для каждой ячейки Type-Type вычисляется относительно того, существуют ли эти типы для одного и того же идентификатора.

Итак, начните с самостоятельного слияния на "ID". Затем вы можете преобразовать свой результат, чтобы получить свою матрицу.

merge + crosstab

v = df.merge(df[['ID', 'Type']], on='ID') 
pd.crosstab(v.Type_x, v.Type_y, v.Qty, aggfunc='sum')

Type_y  LED  SVGA  XGA
Type_x                
LED       4     1    3
SVGA      1     3    2
XGA       3     2    9

merge + pivot_table

df.merge(df[['ID', 'Type']], on='ID').pivot_table(
    index='Type_x', columns='Type_y', values='Qty', aggfunc='sum'
)

Type_y  LED  SVGA  XGA
Type_x                
LED       4     1    3
SVGA      1     3    2
XGA       3     2    9
  • 1
    Это именно то, что мне нужно, спасибо !!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню