Можно ли изменить мульти-индекс на нормальный в Python? - PullRequest
0 голосов
/ 05 июня 2018

Итак, у меня есть набор данных с 4 идентификаторами, каждый из которых имеет 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')

Может ли это быть сделано из предыдущего набора данных

1 Ответ

0 голосов
/ 05 июня 2018

Для меня ваше решение работает хорошо.

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() 
...