假设我有以下数据框:
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
但这感觉就像一个可怕的黑客。是否有更好的方法沿列进行布尔索引?在某处我可以指定一个轴参数?
答案 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