python - 如何根据分组中的最大值快速删除行?

标签 python pandas group-by

我有一个大型数据框,其中包含有关人员及其工作变更历史的信息。有时,某人在一天内对其记录进行了多次更改,每个更改都分配有一个交易序列号。我只想保留当天事务序列号最高的行。目前,我正在使用下面的 for 循环来执行此操作,但这需要很长时间。

list_indexes_to_drop = []
for (associate_id, date), df in df_job_his.groupby(["Employee ID", "Event Date"]):
    if len(df) > 1:
        list_indexes_to_drop += list(df.index[df["Transaction Sequence Number"] != df["Transaction Sequence Number"].max()])

我下面也有这段代码,但我不确定如何使用它来过滤数据帧。

df_job_his.groupby(["Employee ID", "Event Date"])["Transaction Sequence Number"].max()

有没有更有效的方法来解决这个问题?

以下是相同格式的一些随机数据的示例:

df_job_his = pd.DataFrame({"Employee ID": [1, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 6, 7, 8, 9, 9, 10], "Event Date": ["2020-04-05", "2020-06-08", "2020-06-08", "2022-09-01", "2022-02-15", "2022-02-15", "2021-07-29", "2021-07-29", "2021-08-14", "2021-09-14", "2022-01-04", "2022-01-04", "2022-01-04", "2022-04-04", "2020-08-13", "2020-08-13", "2020-03-17"], "Transaction Sequence Number": [1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1]}).groupby(["Employee ID", "Event Date"])

最佳答案

如果你的groupby几乎是一个正确的答案!

获取具有最高“交易序列号”的值的一个技巧是在按交易序列号对数据帧进行排序后使用 .groupby.last()

解决方案如下:

import pandas as pd
import numpy as np
df_job_his = pd.DataFrame({
    'Employee ID': [0, 0, 0, 0, 1, 1, 1],
    'Event Date': [1, 2, 3, 3, 1, 2, 3],
    'Transaction Sequence Number': [1, 2, 4, 3, 5, 6, 7],
    'Important info about transaction': np.random.random(7)
})

df_job_his.sort_values('Transaction Sequence Number').groupby(
    ["Employee ID", "Event Date"]).last()

它输出类似这样的内容,其中日期 3 的员工 o 仅获取最后一行。

<表类=“s-表”> <标题> (员工 ID,事件日期) 交易序列号 有关交易的重要信息 <正文> (0, 1) 1 0.00571239 (0, 2) 2 0.0484783 (0, 3) 4 0.958739 (1, 1) 5 0.0690461 (1, 2) 6 0.721041 (1, 3) 7 0.763681

关于python - 如何根据分组中的最大值快速删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75320065/

相关文章:

mysql - 根据另一个表的匹配进行分组

python - 从 Pandas 数据框中删除空格

python - 在 Pandas 中部分拆分字符串列

python - 检查一列中的值是否在 Python 中另一列的区间值中

sql - 使用不带聚合的 GROUP BY 来检索不同的 "best"结果的替代方法

mysql - 工作台 - 错误 : aggregates not allowed in GROUP BY clause

python - 如何在 python 中使用 spacy 依赖树获取祖先的 child

python - 来自带有 matplotlib 和 cx_Freeze 的 ctypes 的 NotADirectoryError

python - for和if在Python中的用法

python - Python 中的图像处理工具箱(MATLAB)