熊猫数据框到数量总和的重复矩阵

时间:2018-06-21 07:51:48

标签: python pandas dataframe

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

1 个答案:

答案 0 :(得分:1)

这里的关键似乎是“ ID”列,因为每个Type-Type单元的值都是根据这些Type是否针对相同的ID共存来计算的。

因此,从“ 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