Python 3.x pandas 如何比较重复项并删除 csv 中具有较高值的​​行?

标签 python pandas csv dataframe duplicates

您好,我是 Python 的新手,目前使用的是 Python 3.x 版。我有大量数据需要在 csv 中过滤。我在网上搜索,很多人建议将它加载到 pandas DataFrame 中(完成)。

我的列可以定义为:"ID", "Name", "Time", "Token", "Text"

我需要在“Token”下检查任何重复项 - 这可以通过

df = df[df.Token.duplicate(keep=False)]

(如有错误请指正)

但问题是,我需要保留原始行,同时删除其他重复项。为此,有人告诉我将它与“时间”进行比较。具有最小值的“时间”将是原始的(保留),同时删除其余的重复项。

例如:

ID Name Time Token Text

1 | John | 333 | Hello | xxxx

2 | Mary | 233 | Hiiii | xxxx

3 | Jame | 222 | Hello | xxxx

4 | Kenn | 555 | Hello | xxxx

期望的输出:

2 | Mary | 233 | Hiiii | xxxx

3 | Jame | 222 | Hello | xxxx

我做了什么:

    ##compare and keep the smaller value
    def dups(df):
       return df[df["Time"] < df["Time"]]

df = df[df.Token.duplicate()].apply(dups)

这就是我卡住的地方!谁能帮忙?这是我第一次使用 Python 编码,非常感谢任何帮助。

最佳答案

使用sort_values + drop_duplicates:

df = df.sort_values('Time')\
        .drop_duplicates('Token', keep='first').sort_index()
df

   ID  Name  Time  Token  Text
1   2  Mary   233  Hiiii  xxxx
2   3  Jame   222  Hello  xxxx

最后的 sort_index 调用恢复原始数据框的顺序。如果要检索超出该点的单调递增索引,请调用 reset_index

关于Python 3.x pandas 如何比较重复项并删除 csv 中具有较高值的​​行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47121397/

相关文章:

python - 将值字典与值列表进行比较

python - 当我在 pandas 中使用 parse_dates 时,如何保留日期和时间列?

python - 使用用户输入的关键字搜索 CSV 文件中的项目

python - 根据 .CSV 文件中字典键的出现次数进行计数

python - 按系列共享索引划分 Dataframe

python - 如何使用 python 以编程方式创建 Google 表单?是否可以通过应用程序脚本和 python 接口(interface)或类似的东西来做到这一点?

python - 为什么 jupyter 有时打印格式化的 DataFrame 有时打印为文本?

python - 如何通过多个键连接两个数据框?

c# - XSLt.transform 给我 ""

python - 将多个列表写入多个输出文件