您如何匹配整个数据框中的元素,并返回该特定匹配元素的整个行或索引?

时间:2019-03-25 07:14:34

标签: python pandas sklearn-pandas

此数据帧中的每一行都代表一个订单,执行Status.x具有有关订单状态的一些信息。

executionStatus.x列由flatten_json自动创建,由 amirziai,取决于有多少论点。因此,如果一个订单的3种状态(如第0行),则最多可以显示executionStatus.2。由于第1行和第2行仅具有一种状态,因此它仅在executeStatus.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  

1 个答案:

答案 0 :(得分:0)

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