【问题标题】:Pandas: Get top n columns based on a row valuesPandas:根据行值获取前 n 列
【发布时间】:2022-01-17 15:21:19
【问题描述】:

有一个单行数据框,我需要根据一行中的值将其过滤成一个较小的带有过滤列的数据框。
最有效的方法是什么?

df = pd.DataFrame({'a':[1], 'b':[10], 'c':[3], 'd':[5]})
a b c d
1 10 3 5

例如 top-3 功能:

b c d
10 3 5

【问题讨论】:

    标签: python pandas filtering


    【解决方案1】:

    使用每行排序并选择前 3 个值:

    df1 = df.sort_values(0, axis=1, ascending=False).iloc[:, :3]
    print (df1)
        b  d  c
    0  10  5  3
    

    Series.nlargest 的解决方案:

    df1 = df.iloc[0].nlargest(3).to_frame().T
    print (df1)
        b  d  c
    0  10  5  3
    

    【讨论】:

      【解决方案2】:

      您可以转置T,并使用nlargest():

      new = df.T.nlargest(columns = 0, n = 3).T
      
      print(new)
      
         b  d  c
      0  10  5  3
      

      【讨论】:

        猜你喜欢
        • 2016-03-12
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-04
        相关资源
        最近更新 更多