过滤 pandas 数据框行,其中具有 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 的特定行具有值 Y 大于参数 Z 的列 B。
例如:
A
B
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]
输出:
A B
72154 X1 0.998429
72156 X3 0.797648
72157 X2 0.981707
72159 X3 0.987943
72161 X3 0.984621
我想知道是否有更简单的方法来过滤 pandas DataFrame 行,其中具有列 A 和值 X 的特定行具有值 Y 大于参数 Z 的列 B。
例如:
A | B | |
---|---|---|
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]
输出:
A B
72154 X1 0.998429
72156 X3 0.797648
72157 X2 0.981707
72159 X3 0.987943
72161 X3 0.984621