【问题标题】:Group the values using one column and return the one having max value in other column using pandas dataframe使用一列对值进行分组,并使用熊猫数据框在另一列中返回具有最大值的值
【发布时间】:2018-03-29 01:56:28
【问题描述】:

以下是我的数据框示例:

revisionId  | itemId    | wikidataType
290397666   | 23        | Q5
307190482   | 23        | Q5
292002833   | 80        | Q5
292428272   | 80        | Q5
305018745   | 80        | Q5
305018964   | 80        | Q5
305019084   | 80        | Q5
301731639   | 181       | Q5
303692414   | 181       | Q5
306600439   | 192       | Q5
294596767   | 206       | Q5
294597048   | 206       | Q5

我想使用 itemId 列对元素进行分组,并为每个具有最大 revisionId 的项目返回一行。我已经根据 wikidataType、itemId 和 revisionId 对它们进行了排序。以下是我希望我的数据框的样子:

revisionId  | itemId    | wikidataType
307190482   | 23        | Q5
305019084   | 80        | Q5
303692414   | 181       | Q5
306600439   | 192       | Q5
294597048   | 206       | Q5

此外,这里 wikidataType 列仅包含一个值“Q5”。但在整个数据框中,有 100 种不同的类型。但这可能不是问题,因为我可以迭代这 100 种类型,因为我已经修复了它们的值。有人对此有想法吗? 提前致谢。

【问题讨论】:

    标签: python pandas sorting dataframe group-by


    【解决方案1】:

    需要sort_values + drop_duplicates 和选择列以检查dupes 并只保留最后一个值:

    df = (df.sort_values(by=['wikidataType', 'itemId', 'revisionId']) 
            .drop_duplicates(['itemId','wikidataType'], keep='last'))
    print (df)
        revisionId  itemId wikidataType
    1    307190482      23           Q5
    6    305019084      80           Q5
    8    303692414     181           Q5
    9    306600439     192           Q5
    11   294597048     206           Q5
    

    【讨论】:

    • 如果我首先像 df.sort_values(by=['wikidataType', 'itemId', 'revisionId']) 那样排序,然后按照你所说的应用 group_by,第一种方法会起作用吗?它是一个巨大的数据框,因此无法正确验证。
    • 没错,需要排序,我得测试一下。
    • 我对其进行了测试,需要按您的评论排序,我根据它编辑答案。
    • 再问一个问题,如果在完成上述所有处理后,我必须将每个不同的 wikidataType 限制为 100,该怎么办?
    • 需要df = df[df.groupby('wikidataType')['wikidataType'].cumcount() < 100]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多