使用
set_index
具有
stack
,过滤器
1
创造
DataFrame
承包商:
df1 = df.set_index('animal').stack()
s = df1[df1==1]
df2 = pd.DataFrame({'a':s.index.get_level_values(0),
'b':s.index.get_level_values(1)})
print (df2)
a b
0 frog swim
1 frog jump
2 toad tall
3 tadpole jump
另一个解决方案是使用
MultiIndex.to_frame
:
df2 = s.index.to_frame(index=False)
df2.columns = ['a','b']
print (df2)
a b
0 frog swim
1 frog jump
2 toad tall
3 tadpole jump
不同的解决方案
melt
并通过
query
:
df2 = (df.melt('animal', var_name='val')
.query('value == 1')
.sort_values('animal')
.reset_index(drop=True)
.drop('value', axis=1))