Широкоформатная транспонировка Pandas в длинный формат

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных pandas, подобный этому, со столбцом идентификатора и кучей столбцов индикаторов (True / False):

 df_have:

ID Male  Special_Need    Teeanger
1    T      F              T
2    F      T              F
  

Я хочу транспонировать его, но только для attributes = True. т. е.

 df_want:

ID  Attribute
1    Male
1    Teenager
2   Special_Need
  

Комментарии:

1. df.melt('ID').loc[lambda x : x['value']=='T'].drop('value',1).sort_values('ID') проблема с расплавлением

Ответ №1:

Использование stack

 df.set_index('ID').rename_axis('Attribute',1).stack().loc[lambda x : x=='T'].reset_index().drop(0,1)
Out[268]: 
   ID     Attribute
0   1          Male
1   1      Teeanger
2   2  Special_Need
  

Ответ №2:

Использование melt :

 u = df.melt(id_vars='ID', var_name='Attribute')
u.loc[u.value.eq('T'), ['ID', 'Attribute']]
  

    ID     Attribute
0   1          Male
3   2  Special_Need
4   1      Teeanger