#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