代码之家  ›  专栏  ›  技术社区  ›  tooptoop4

如果值=1,则python-pandas dataframe打印列

  •  1
  • tooptoop4  · 技术社区  · 6 年前

    将此数据保存在panda数据框中:

    animal      tall    swim        jump  
    frog          0        1            1
    toad          1        0            0
    tadpole       0        0            1
    

    希望此输出:

    frog swim
    frog jump
    toad tall
    tadpole jump
    

    有什么内置功能吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

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