首页 > 解决方案 > 更改 DataFrame 的形状以进行分组

问题描述

我的问题如下。

资源 :

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  values  
--  -----  --------  
A    aaa     10          
A    abb     30      
A    acc     40      

B    baa     20      
B    bbb     60      

C    caa     50   

我尝试使用'unstack()',但结果与我想要的不同。
请帮忙。
提前致谢

标签: pythonpandas

解决方案


ID如有必要,从列创建索引DataFrame.set_index,然后str.split为 列创建索引MultiIndex,因此可能由 重塑DataFrame.stack。最后一次数据清理 - 双倍DataFrame.reset_index- 首先用于删除 MultiIndex 的第二级,第二个用于从第一级删除的列MultiIndex

df = df.set_index('ID')
df.columns = df.columns.str.split('_', expand=True)
df = df.stack().reset_index(level=1, drop=True).reset_index()
print (df)
  ID subID  value
0  A   aaa   10.0
1  A   abb   30.0
2  A   acc   40.0
3  B   baa   20.0
4  B   bbb   60.0
5  C   caa   50.0

推荐阅读