python - 如何在索引列中旋转具有重复条目的数据框?
问题描述
我有一个数据框,我真的很难转入正确的结构,我想在这里寻求一些帮助,因为我无法弄清楚要使用的正确索引、列和值参数。我正在使用python。
我有这个数据框(对不起,它很长,但我觉得有必要包含所有内容以显示结构):
Size Color Parameter Estimate
---------------------------------------------
Small Blue P1 XX
Small Blue P2 XX
Small Blue P3 XX
Small Red P1 XX
Small Red P2 XX
Small Red P3 XX
Small Green P1 XX
Small Green P2 XX
Small Green P3 XX
Medium Blue P1 XX
Medium Blue P2 XX
Medium Blue P3 XX
Medium Red P1 XX
Medium Red P2 XX
Medium Red P3 XX
Medium Green P1 XX
Medium Green P2 XX
Medium Green P3 XX
Big Blue P1 XX
Big Blue P2 XX
Big Blue P3 XX
Big Red P1 XX
Big Red P2 XX
Big Red P3 XX
Big Green P1 XX
Big Green P2 XX
Big Green P3 XX
我想以某种方式把这个数据框变成这样:
P1 P2 P3
Blue Green Red Blue Green Red Blue Green Red
Big 34 17 12 19 39 28 49 39 48
Medium 40 15 24 15 29 21 41 12 26
Small 10 31 19 46 39 43 16 13 41
我尝试使用pd.pivot()
and pd.pivot_table()
,运行以下多种组合:
df.pivot(index ='Size', columns ='Color', values =['Parameter', 'Estimate'])
但每次我不断收到此错误:
ValueError: Index contains duplicate entries, cannot reshape
如何正确填写数据透视表参数,以便将初始数据框重新构建为目标数据框?
解决方案
您需要['Parameter', 'Color']
在columns
参数中:
(df.pivot(index='Size', columns=['Parameter', 'Color'], values='Estimate')
.sort_index(axis=1))
Parameter P1 P2 P3
Color Blue Green Red Blue Green Red Blue Green Red
Size
Big XX XX XX XX XX XX XX XX XX
Medium XX XX XX XX XX XX XX XX XX
Small XX XX XX XX XX XX XX XX XX
您的实际数据可能具有重复的索引(示例数据中未显示),这意味着您需要使用groupby
edcumcount
列消除歧义,然后您的index
参数将成为['Size', 'cumcounted_column']
.
推荐阅读
- r - 连接到 sparklyr 中默认数据库以外的数据库
- c# - XNA Game Studio - 无法编辑项目中的文件
- java - 在 Spring Boot 中使用带有休眠空间 5 的 PostGIS 地理点
- identityserver3 - IdentityServer3 和 No signin id 使用 ADFS 3.0 的自定义提供程序传入
- python - 将 ThreadPoolExecutor 返回到任务数组
- assembly - 如何分解此代码以查找错误?
- android - 如何在 Android 中使用 C++
- python - Django 显示所有用户
- sql - Oracle获取列值更改的行
- javascript - Mapbox在圆圈上添加背景图片