簡體   English   中英

篩選 pandas dataframe 行,其中具有列 A 和值 X 的特定行具有列 B,其值 Y 大於參數 Z

[英]Filter pandas dataframe rows where a specific row with column A and value X has column B with value Y greater than a parameter Z

我想知道是否有更簡單的方法來過濾 pandas DataFrame 行,其中具有列 A 和值 X 的特定行具有列 B,其值 Y 大於參數 Z。


例如:

一種
72154 X1 0.998429
72155 X2 0.584253
72156 X3 0.797648
72157 X2 0.981707
72158 X1 0.698844
72159 X3 0.987943
72160 X1 0.797648
72161 X3 0.984621
72162 X2 0.221968

我設法用這段代碼完成了它:

import pandas as pd

Z = 0.8
mask1 = (df.A.isin(['X1', 'X2']))
mask2 = (df.B > Z)
mask3 = (df.A == 'X3')
sub_df_x1_x2 = df[mask1 & mask2]
sub_df_x3  = df[mask3]
final_df = pd.concat([sub_df_x1_x2, sub_df_x3])

但我不認為這是最干凈或最好的方法。 你們有什么想法嗎? 我在想這樣的事情,但我無法讓它發揮作用。

mask1 = (df.A.isin(['X1', 'X2']) & df.B > Z)
# or
mask1 = (df.A.isin(['X1', 'X2'])[B] > Z)

你可以用|鏈接這兩個 :

out = df[(df.A.isin(['X1', 'X2']) & (df.B > Z)) | (df.A == 'X3')]

或使用您已有的定義:

out = df[(mask1 & mask2) | mask3]

Output:

        A         B
72154  X1  0.998429
72156  X3  0.797648
72157  X2  0.981707
72159  X3  0.987943
72161  X3  0.984621

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM