如何匹配整个数据框中的元素和 return 特定匹配元素的整行或索引?

How do you match an element in the entire dataframe and return the entire row or index of that particular matched element?

此数据框中的每一行代表一个订单,executionStatus.x 包含有关订单状态的一些信息。

那些 executionStatus.x 列是由 flatten_json 自动创建的 amirziai,取决于有多少参数。因此,如果一个订单有 3 个状态,如第 0 行,则最多为 executionStatus.2。由于第 1 行和第 2 行只有一个状态,因此它只有 executionStatus.0 中的值。

我的问题是我无法匹配 "ORDER_FULFILLED",因为我不知道会有多少个 executionStatuses,我需要像 df[df['executionStatus.0'] 这样写出准确的列名.str.match('ORDER_FULFILLED')].

         executionStatus.0 executionStatus.1 executionStatus.2  \
0  REQUESTED_AMOUNT_ROUNDED              MEOW   ORDER_FULFILLED   
1           ORDER_FULFILLED               NaN               NaN   
2     NOT_AN_INFUNDING_LOAN               NaN               NaN   

   investedAmount  loanId  requestedAmount  OrderInstructId  
0            50.0   22222             55.0            55555  
1            25.0   33333             25.0            55555  
2             0.0   44444             25.0            55555  

有没有办法在整个数据框中获取与 "ORDER_FULFILLED" 元素匹配的整行或索引?

理想情况下,匹配的数据框应如下所示,因为第 0 行和第 1 行在 executionStatuses 中有 ORDER_FULFILLED 而第 3 行没有,因此应将其排除。谢谢!

investedAmount  loanId  requestedAmount  OrderInstructId  
0            50.0   22222             55.0            55555  
1            25.0   33333             25.0            55555  

使用 df.filter() 获取包含带有布尔掩码的 executionStatus 的相似列:

df[df.filter(like='executionStatus').eq('ORDER_FULFILLED').any(axis=1)]

          executionStatus.0 executionStatus.1 executionStatus.2  \
0  REQUESTED_AMOUNT_ROUNDED              MEOW   ORDER_FULFILLED   
1           ORDER_FULFILLED               NaN               NaN   

   investedAmount  loanId  requestedAmount  OrderInstructId  
0              50   22222               55            55555  
1              25   33333               25            55555  

如果要从输出中删除 execution 列,请使用:

df.loc[df.filter(like='executionStatus').eq('ORDER_FULFILLED').any(axis=1),\
           df.columns.difference(df.filter(like='executionStatus').columns)