思路

  • 先按需要取最大的数据进行倒序排序
  • 去重并保留第一行,重复的检查列,就是用于分组的列

示例

数据

user_id product_id price date product_name
1 1 12 2022-12-01 A
1 1 15 2022-11-11 A
2 1 15 2022-11-35 A
2 1 13 2022-12-01 A

要求

取出用户购买各种商品最近一天,购买最便宜的购买记录 即:用户和商品最后一次记录,如果同一天购买了相同商品多次取最便宜的一次

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# df_org
#    user_id  product_id  price        date product_name
# 0        1           1     12  2022-12-01            A
# 1        1           1     15  2022-11-11            A
# 2        2           1     15  2022-11-35            A
# 3        2           1     13  2022-12-01            A

# 对想排序的列排序
df = df_org.sort_values(by=['date', 'price'], ascending = [False, True])
#    user_id  product_id  price        date product_name
# 0        1           1     12  2022-12-01            A
# 1        2           1     13  2022-12-01            A
# 3        2           1     15  2022-11-35            A
# 2        1           1     15  2022-11-11            A

# 对想去重的列进行去重,保留第一个
df.drop_duplicates(subset=['user_id', 'product_id'], keep='first')
#    user_id  product_id  price        date product_name
# 0        1           1     12  2022-12-01            A
# 1        2           1     13  2022-12-01            A

结果

user_id product_id price date product_name
1 1 12 2022-12-01 A
2 1 13 2022-12-01 A