【问题标题】:dataframe boolean selection along columns instead of row沿列而不是行的数据框布尔选择
【发布时间】:2014-08-12 20:06:44
【问题描述】:

假设我有以下数据框:

          a         b         c         d 
0  0.049531  0.408824  0.975756  0.658347
1  0.981644  0.520834  0.258911  0.639664
2  0.641042  0.534873  0.806442  0.066625
3  0.764057  0.063252  0.256748  0.045850

并且我只想要第 0 行中的值的创建者大于 0.5 的列的子集。我可以这样做:

df2 = df.T
myResult = df2[df2.iloc[:, 0] > 0.5].T

但这感觉就像一个可怕的黑客攻击。有没有更好的方法来沿列进行布尔索引?我可以在某个地方指定一个轴参数?

【问题讨论】:

  • 我相信你已经找到了最优雅的方式。

标签: python pandas


【解决方案1】:

这个怎么样?

df.loc[:, df.iloc[0, :] > 0.5]

【讨论】:

  • 是的,这正是我想要的。
【解决方案2】:

另一种不使用转置的方法是创建一个布尔掩码,判断第一行的值是否大于 0.5,然后删除具有阈值的 NaN,最后制作 df 列的列表以过滤原始 df。不过,这很令人困惑;)

In [76]:

df[list(df[df.head(1)> 0.5].dropna(thresh=1, axis=1))]
Out[76]:
              c         d
index                    
0      0.975756  0.658347
1      0.258911  0.639664
2      0.806442  0.066625
3      0.256748  0.045850

【讨论】:

    【解决方案3】:

    查看答案的另一种方式:

    In [14]: df.T[df.T[0] > 0.5].T
    Out[14]: 
              c        d 
    0  0.975756  0.658347
    1  0.258911  0.639664
    2  0.806442  0.066625
    3  0.256748  0.045850
    

    【讨论】:

    • 三重转置可能不如你的答案优雅。
    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2016-09-16
    • 2015-09-16
    • 2020-06-14
    • 2018-06-10
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    相关资源
    最近更新 更多