更改DataFrame的形状以进行分组

时间:2019-04-10 06:22:35

标签: python pandas

我的问题在下面。

源:

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()'进行了尝试,但结果与我想要的结果有所不同。
请帮忙。
预先感谢

1 个答案:

答案 0 :(得分:2)

如有必要,从ID列创建索引,DataFrame.set_index,然后为MultiIndex创建str.split列,因此可以通过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