python - Pandas 部分转置

标签 python pandas pivot reshape transpose

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

原始数据:

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 下的最大 subID 计数值。

在数据透视和转置数据帧时,我不需要任何计算值。

请帮忙

最佳答案

使用cumcount对于计数器,通过 set_index 创建 MultiIndex , reshape unstack并按 sort_index列中的 MultiIndex 的第一级进行排序。最后通过列表理解使用 reset_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

关于python - Pandas 部分转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54567587/

相关文章:

python - 如何选择与特定行匹配的行

sql - Oracle SQL - 将表行转换为列并在数据透视表中使用子查询

sql - 选择将同一列的所有行数据合并到一列中

python - 删除列表中指定范围python之外的所有值

python - Python itertools groupby 中令人不安的奇怪行为/错误?

Python 和 Pandas : Re-indexing after selecing entries

sql - 如何根据 SQL Server 中的值取消透视列和 GROUP BY?

python - 构造函数中动态初始化数据库

用于重复添加的 Python for 循环

python - 保存带有一些额外信息的 DataFrame