python - 使用 pandas 部分取消透视表

标签 python pandas

这是一个表格,需要按类别部分取消透视。

ID  Class   Type       2017 2018
12A     A   Net         1   7
12B     A   Gross           8
12A     B   Net         3   9
12B     B   Gross       4   10
13A     A   Net         5   11
13C     B   Net         6   5

预期结果:

ID  Class   Type    2017A       2018A      2017B    2018B
12A    A    Net     1           7           3       9
12B    A    Gross   NaN         8           4       10
13A    A    Net     5           11          NaN     NaN
13C    B    Net     NaN         NaN         6       5

最佳答案

用途:

df1 = df.set_index(['ID','Type','Class']).unstack().sort_index(level=1, axis=1)
df1.columns = ['{}{}'.format(a,b) for a, b in df1.columns]
df1 = df1.reset_index()

s = df.drop_duplicates('ID').set_index('ID')['Class']
df1.insert(1, 'Class', df1['ID'].map(s))
print (df1)
    ID Class   Type  2017A  2018A  2017B  2018B
0  12A     A    Net    1.0    7.0    3.0    9.0
1  12B     A  Gross    NaN    8.0    4.0   10.0
2  13A     A    Net    5.0   11.0    NaN    NaN
3  13C     B    Net    NaN    NaN    6.0    5.0

说明:

  1. reshape set_indexunstack ,按第二级对列进行排序 sort_index
  2. 通过列表理解压平列中的 MultiIndex
  3. 对于列 Class 使用 insert对于 map 创建的新第二列

关于python - 使用 pandas 部分取消透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49788418/

相关文章:

python - 如何修改日期值以仅保留月份值

python - 如何找到不同角度的两个同心轮廓之间的距离?

python - 计算两个列表增量的快速算法

python - Pandas 替换所有列名中的一个字符

python - pandas dataframe 使用 apply 为一组值添加多行

python - Pandas:通过直方图结果索引数据

python - 如何在Python中匹配来自不同DataFrame的相同列的字段?

python - 在 pyQt 中创建一个覆盖整个对话框的不可见层

python - 将带有嵌入式括号的字符串转换为字典

python - 尝试为 python 3.7 安装 pillow 5.3.0 时出现问题