我有一个像这样的数据框:
df = pd.DataFrame(
[
["True", "False"],
["True", "True"],
["False", "True"],
],
index=["bob", "sue", "joe"],
columns=["R1", "R2"],
)
我想融化df,以便使用索引名,并用列名替换True,所以输出如下:
df = pd.DataFrame(
[
["bob", "R1"],
["sue", "R1"],
["sue", "R2"],
["joe", "R2"],
],
columns=["Names", "Role"],
)
我该如何实现?
答案 0 :(得分:2)
使用DataFrame.melt
,并将索引首先转换为列:
df = df.rename_axis('Names').reset_index().melt('Names', var_name='Role')
然后按True
值进行过滤:
df = df.loc[df['value'].map({'True':True, 'False':False}), ['Names','Role']]
或者:
df = df.loc[df['value'] == 'True', ['Names','Role']]
print(df)
Names Role
0 bob R1
1 sue R1
4 sue R2
5 joe R2