我有一个Pandas DataFrame,我想查找第i列值比其他列大10倍的所有行。 这是我的DataFrame的示例:
例如,查看列i = 0,B行(0.344),它比同一行但其他列(0.001、0、0.009、0)中的值大10倍。所以我想:
my_list_0=[False,True,False,False,False,False,False,False,False,False,False]
列数可能会更改,因此我不想要像这样的解决方案:
#This is good only for a DataFrame with 4 columns.
my_list_i = data.loc[(data.iloc[:,i]>10*data.iloc[:,(i+1)%num_cols]) &
(data.iloc[:,i]>10*data.iloc[:,(i+2)%num_cols]) &
(data.iloc[:,i]>10*data.iloc[:,(i+3)%num_cols])]
有什么主意吗? 谢谢。
答案 0 :(得分:1)
给出df:
df = pd.DataFrame({'cell1':[0.006209, 0.344955, 0.004521, 0, 0.018931, 0.439725, 0.013195, 0.009045, 0, 0.02614, 0],
'cell2':[0.048043, 0.001077, 0,0.010393, 0.031546, 0.287264, 0.016732, 0.030291, 0.016236, 0.310639,0],
'cell3':[0,0,0.020238, 0, 0.03811, 0.579348, 0.005906, 0,0,0.068352, 0.030165],
'cell4':[0.016139, 0.009359, 0,0,0.025449, 0.47779, 0, 0.01282, 0.005107, 0.004846, 0],
'cell5': [0,0,0,0.012075, 0.031668, 0.520258, 0,0,0,2.728218, 0.013418]})
i = 0
您可以使用
(10 * df.drop(df.columns[i], axis=1)).lt(df.iloc[:,i], axis=0).all(1)
获取
0 False
1 True
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 False
dtype: bool
用于任意数量的列。这将删除列i
,将剩余df乘以10,并逐行检查是否小于i
,然后仅在行中的所有值均为{{1}时返回True
}。因此,它为获取的每一行返回一个向量True
,对于其他行返回一个向量True
。
如果要提供任意阈值,可以将False
求和并除以列数-1,然后与阈值进行比较:
Trues