将此数据保存在熊猫数据框中:
animal tall swim jump
frog 0 1 1
toad 1 0 0
tadpole 0 0 1
想要这样的输出:
frog swim
frog jump
toad tall
tadpole jump
有任何内置函数吗?
答案 0 :(得分:1)
将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
df2 = (df.melt('animal', var_name='val')
.query('value == 1')
.sort_values('animal')
.reset_index(drop=True)
.drop('value', axis=1))