Pandas宽格式转置为长格式

3

我有一个类似这样的Pandas数据框,其中包含一个ID列和一堆指示器列(True/False):

df_have:

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

我希望将其转置,但仅限于属性为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') 融合问题 - BENY
2个回答

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

2
使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接