将重复的行转换为带有标题的多列

时间:2019-07-12 19:27:48

标签: python pandas

输入数据框:

case    constant    number  code        
761e7   C20         3570    A   
761e7   C20         2780    A   
761e7   C20         7150    A   
761e7   C20         2950    A   
761e7   C20         3570    B   
761e7   C20         2780    B   
761e7   C20         7150    B   
761e7   C20         2950    B
761e7   C21         3000    A   
761e8   C20         3570    A   
761e8   C20         2780    A   
761e8   C20         7150    A   
761e8   C20         2950    A   
761e8   C14         3570    B   
761e8   C14         2780    B   
761e8   C14         7150    B

尝试将重复的Numbers列转换为基于其他列的多个列。

熊猫枢轴转换给我一个ValueError,如图所示

df = final_df.pivot(index='case', columns='number')

ValueError: Index contains duplicate entries, cannot reshape

预期输出:

case    constant    code    number1 number2 number3 number4 number5
761e7   C20         A       3570    2780    7150    2950    0
761e7   C21         A       0       0       0       0       3000
761e7   C20         B       3570    2780    7150    2950    0
761e8   C20         A       3570    2780    7150    2950    0
761e8   C14         B       3570    2780    7150    0       0

2 个答案:

答案 0 :(得分:1)

一种更普通的方法是让您的列名称为数字值,并且行中包含计数-例如:

data["alternatives"]

屈服

df.pivot_table(index=['case','constant','code'], 
               columns='number', aggfunc=len).reset_index()

答案 1 :(得分:1)

IIUC,尝试:

    case constant code  number1  number2  number3  number4
0  761e7      C20    A     3570     2780     7150     2950
1  761e7      C20    B     3570     2780     7150     2950
2  761e7      C21    A     3000        0        0        0
3  761e8      C14    B     3570     2780     7150        0
4  761e8      C20    A     3570     2780     7150     2950

输出:

subcribe()