【问题标题】:Pandas partial transpose熊猫部分转置
【发布时间】:2019-07-01 05:31:42
【问题描述】:

我想通过转置某些列并修复其他列来重新格式化数据框。

原始数据:

ID  subID  values_A  
--  -----  --------  
A    aaa     10      
B    baa     20      
A    abb     30      
A    acc     40      
C    caa     50      
B    bbb     60      

旋转一次:

 pivot_table( df, index = ["ID", "subID"] )

输出:

ID  subID  values_A 
--  -----  -------- 
A    aaa     10     
     abb     30     
     acc     40     

B    baa     20     
     bbb     60     

C    caa     50     

我想要做什么(修复 ['ID'] 列和部分转置):

ID  subID_1  value_1   subID_2  value_2  subID_3  value_3
--  -------  -------  --------  -------  -------  -------
A    aaa       10       abb       30       acc       40
B    baa       20       bbb       60       NaN       NaN 
C    caa       50       NaN       NaN      NaN       NaN 

我所知道的每个 ID 下的最大子 ID 计数值。

当对数据帧进行旋转和转置时,我不需要任何计算值。

请帮忙

【问题讨论】:

    标签: python pandas pivot reshape transpose


    【解决方案1】:

    使用cumcount 作为计数器,通过set_index 创建MultiIndex,通过unstack 重塑,并通过sort_indexMultiIndex in columns 的第一级进行排序。最后通过list comprehensionreset_index 将其展平:

    g = df.groupby('ID').cumcount()
    
    df = df.set_index(['ID', g]).unstack().sort_index(level=1, axis=1)
    #python 3.6+
    df.columns = [f'{a}_{b+1}' for a, b in df.columns]
    #python bellow
    #df.columns = ['{}_{}'.format(a, b+1) for a, b in df.columns]
    df = df.reset_index()
    print (df)
      ID subID_1  values_A_1 subID_2  values_A_2 subID_3  values_A_3
    0  A     aaa        10.0     abb        30.0     acc        40.0
    1  B     baa        20.0     bbb        60.0     NaN         NaN
    2  C     caa        50.0     NaN         NaN     NaN         NaN
    

    【讨论】:

    • @ksong - 欢迎您!如果有什么需要解释的,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2022-12-16
    • 2012-09-29
    • 2018-10-25
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2022-06-14
    • 2022-12-16
    相关资源
    最近更新 更多