![](/img/trans.png)
[英]Python-Pandas Dataframe: count values greater than or equal to a value in the dataframe
[英]Extract rows from pandas dataframe with at least one value greater than or equal to values from array
我有以下 dataframe:
mba_p ssc_p hsc_p degree_p etest_p
0 58.80 67.00 91.00 58.00 55.0
1 66.28 79.33 78.33 77.48 86.5
2 57.80 65.00 68.00 64.00 75.0
3 59.43 56.00 52.00 52.00 66.0
4 55.50 85.80 73.60 73.30 96.8
... ... ... ... ... ...
210 74.49 80.60 82.00 77.60 91.0
211 53.62 58.00 60.00 72.00 74.0
212 69.72 67.00 67.00 73.00 59.0
213 60.23 74.00 66.00 58.00 70.0
214 60.22 62.00 58.00 53.00 89.0
我想根據這個條件過濾數據:
提取至少一個值大於此列表中任何值的所有行:
[66.255, 75.7, 73.0, 72.0, 83.5]
tl; dr:第一行是候選行,因為 67 和 91 大於上面列表中的多個值(列表中的值基本上是每列的第 75 個百分位)。 同樣,提取所有此類行。
我嘗試使用 np.where() 使用此處顯示的步驟,但由於它僅基於一個值而不是列表進行過濾,因此我不知道如何將其擴展到這種情況。 我猜一個簡單的條件檢查只會返回所有值都大於等於的行(除非我遺漏了任何東西)。 對不起,如果這聽起來有點令人費解但還不能破解它。
您可以使用 dataframe 的掩碼來獲取值大於數組中最小值的行
num = min(66.255, 75.7, 73.0, 72.0, 83.5)
print(df.loc[df[df > num].any(axis=1)])
Output
mba_p ssc_p hsc_p degree_p etest_p
0 58.80 67.00 91.00 58.00 55.0
1 66.28 79.33 78.33 77.48 86.5
2 57.80 65.00 68.00 64.00 75.0
4 55.50 85.80 73.60 73.30 96.8
5 74.49 80.60 82.00 77.60 91.0
6 53.62 58.00 60.00 72.00 74.0
7 69.72 67.00 67.00 73.00 59.0
8 60.23 74.00 66.00 58.00 70.0
9 60.22 62.00 58.00 53.00 89.0
a = np.array([66.255, 75.7, 73.0, 72.0, 83.5])
df[df.apply(lambda x: (x.to_numpy() > a[:, None]).any(), axis = 1)]
mba_p ssc_p hsc_p degree_p etest_p
0 58.80 67.00 91.00 58.00 55.0
1 66.28 79.33 78.33 77.48 86.5
2 57.80 65.00 68.00 64.00 75.0
4 55.50 85.80 73.60 73.30 96.8
210 74.49 80.60 82.00 77.60 91.0
211 53.62 58.00 60.00 72.00 74.0
212 69.72 67.00 67.00 73.00 59.0
213 60.23 74.00 66.00 58.00 70.0
214 60.22 62.00 58.00 53.00 89.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.