沿列进行数据框布尔选择而非行

2 投票
3 回答
1598 浏览
提问于 2025-04-18 17:03

假设我有一个这样的数据表:

          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

还有一种看待你答案的方式:

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
1

另一种不使用转置的方法是,先创建一个布尔遮罩,判断第一行的值是否大于0.5,然后根据一个阈值去掉NaN值,最后再列出数据框的列名,以此来过滤原始的数据框。不过,这种方法看起来有点复杂;)

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
7

这个怎么样?

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

撰写回答