我想知道是否有一種更簡單的方法來過濾熊貓 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)
uj5u.com熱心網友回復:
您可以將兩者鏈接|:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444462.html
下一篇:回填基于組pandas的列
