Используйте boolean indexing
с логической маской, созданной np.all
:
print (df)
A B C
0 5 8 10
1 5 4 1
2 7 5 6
3 6 6 0
4 3 4 1
thr = [3, 6, 9]
df = df[np.all(df.values > np.array(thr), axis=1)]
print (df)
A B C
0 5 8 10
Решение для панд с DataFrame.gt
(>)
с DataFrame.all
:
df = df[df.gt(thr).all(axis=1)]
print (df)
A B C
0 5 8 10
И решение с совместным списком:
masks = [df.iloc[:, i] > j for i, j in enumerate(thr)]
df = df[pd.concat(masks, axis=1).all(axis=1)]
Альтернатива:
df = df[np.logical_and.reduce(masks)]
Объяснение :
Сначала сравните все значения по np.array
- необходимы одинаковые длины thr
и столбцы:
print (df.values > np.array(thr))
[[ True True True]
[ True False False]
[ True False False]
[ True False False]
[False False False]]
Затем проверьте все True
с на строки по numpy.all
:
print (np.all(df.values > np.array(thr), axis=1))
[ True False False False False]