该数据框中的每一行都代表一个订单,执行Status.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)

关于python - 如何匹配整个数据框中的元素,并返回该特定匹配元素的整个行或索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55332802/

10-09 17:42