dataframe布尔选择沿列而不是行

时间:2014-08-12 20:06:44

标签: python pandas

假设我有以下数据框:

          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

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

3 个答案:

答案 0 :(得分:6)

这个怎么样?

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

答案 1 :(得分:1)

不使用转置的另一种方法是在第一行是否具有大于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

答案 2 :(得分:0)

另一种看待你答案的方式:

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