首页 > 解决方案 > 如何匹配整个数据框中的元素并返回该特定匹配元素的整行或索引?

问题描述

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

这些 executionStatus.x 列由 amirziai 的 flatten_json 自动创建,具体取决于有多少参数。因此,如果一个订单有 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  

标签: pythonpandassklearn-pandas

解决方案


用于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)

推荐阅读