是否可以在python中将多索引更改为正常

时间:2018-06-05 05:48:08

标签: python python-3.x pandas group-by pivot-table

所以我有一个包含4个ID的数据集,每个id有70个值,存在和不存在的值。我使用以下代码计算了当前和不存在的值的数量

df=pd.pivot_table(df,index=["ID",'status'], values=["Sem1"], aggfunc=[len]).reset_index() 
df['ID'] = df['ID'].mask(df['ID'].duplicated(), '') 
df
  ID         Status      len
                         Sem1
 4234        Present     45
             Absent      25
 4235        Present     40
             Absent      30
 4236        Present     35
             Absent      35
 4237        Present     50
             Absent      20

 In: df.columns
 Out:ultiIndex(levels=[['len', 'status', 'ID'], ['sem1', '']],
       labels=[[2, 1, 0], [1, 1, 0]])

我需要将列分别添加到两个不同的数据框中 有没有办法分别取列? 另外,需要知道它是否可以更改为以下数据集?

  ID         Status      Sem1
 4234        Present     45
             Absent      25
 4235        Present     40
             Absent      30
 4236        Present     35
             Absent      35
 4237        Present     50
             Absent      20
In:df.columns
Out:Index(['ID', 'Status','Sem1'], dtype='object')

可以从previos数据集中完成吗

1 个答案:

答案 0 :(得分:4)

对我来说,你的解决方案很好用。

df = pd.DataFrame({'Sem1':[1,3,5,7,1,0],
                   'Sem2':[5,3,6,9,2,4],
                   'ID':list('aaabbb')})

print (df)
   Sem1  Sem2 ID
0     1     5  a
1     3     3  a
2     5     6  a
3     7     9  b
4     1     2  b
5     0     4  b

df1 = df.groupby('ID').mean().reset_index()
print (df1)
  ID      Sem1      Sem2
0  a  3.000000  4.666667
1  b  2.666667  5.000000

编辑:

删除[]

df = pd.pivot_table(df,index=["ID",'status'], values="Sem1", aggfunc='size').reset_index()