python - 熊猫数据框到数量总和的重复矩阵
问题描述
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
解决方案
这里的关键似乎是“ID”列,因为每个 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
推荐阅读
- r - R中%%和%之间的差异
- google-cloud-platform - Tensorboαrd 不读取日志文件,如何删除现有文件?
- google-chrome - 在 Chrome 扩展 API 中获取基于标签的 url 历史记录
- angular - 使用 HTTPClient 添加服务后测试失败
- php - PostgreSQL 迁移失败并出现错误消息“找不到驱动程序”
- c++ - llvm,通过 c++ API 定义字符串和数组
- python - Django 'WSGIRequest' 对象没有属性 'Post'
- javascript - 在 React 中,是否可以在父级的多个组件中使用子级的 Ajax JSON 响应?
- search - 二进制搜索时间复杂度:为什么基数 2 在 n 的对数基数 2 中无关紧要?
- jqgrid - 使用 jqgrid 动态创建数据 url