首页 > 解决方案 > 检查 groupby 中的值是否存在于数据框中

问题描述

我正在使用 pandas,并且我有一个名为orders. 它有 3 列 iduser_idorder_timestamp

我想做的第一步是返回groupby user_id并返回对应于最小 order_timestamp(id、user_id 和最小 order_timestamp)的整行。这告诉我哪些订单 ID 是“第一订单”。我们将其称为数据框。minorder_timestampfirst_orders

我想做的下一步是first_orders与订单数据框进行比较,并创建一个不包括第一订单的新数据框。我们可以这样称呼non_first_orders

最有效的方法是什么?

orders看起来像这样

id user_id order_timestamp
1  10       1/1/19
2  10       1/10/19
3  10       2/1/18
4  11       10/2/19
5  11       1/1/19
6  11       3/1/19
7  12       6/9/19
8  12       5/1/18
9  12       3/12/19

第一个订单应该看起来像这样 id user_id order_timestamp

3  10       2/1/18
5  11       1/1/19
8  12       5/1/19

最后,non_first_orders应该是这样的

id user_id order_timestamp
1  10       1/1/19
2  10       1/10/19
4  11       10/2/19
6  11       3/1/19
7  12       6/9/19
9  12       3/12/19

标签: pythonpandaspandas-groupby

解决方案


尝试:

idx = orders.groupby('user_id')['order_timestamp'].idxmin()
orders.loc[idx]

输出:

   id  user_id order_timestamp
2   3       10      2018-02-01
4   5       11      2019-01-01
7   8       12      2018-05-01

和,

non_first_orders = orders[~orders.index.isin(idx)]
non_first_orders

输出:

   id  user_id order_timestamp
0   1       10      2019-01-01
1   2       10      2019-01-10
3   4       11      2019-10-02
5   6       11      2019-03-01
6   7       12      2019-06-09
8   9       12      2019-03-12

推荐阅读