python - 使用一列对值进行分组,并使用 pandas 数据框返回另一列中具有最大值的值

标签 python pandas sorting dataframe group-by

以下是我的数据框的示例:

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 种类型,因为我已经修复了它们的值。有人对此有想法吗? 提前致谢。

最佳答案

需要sort_values + drop_duplicates选择列来检查重复并仅保留最后一个值:

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

关于python - 使用一列对值进行分组,并使用 pandas 数据框返回另一列中具有最大值的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46789055/

相关文章:

python - 如何将 pip/pypi 安装的 python 包转换为 zip 文件以在 AWS Glue 中使用

python - Long Int 文字 - 语法无效?

python - 使用 DataFrame loc 时出现“标签 [1] 不在 [索引] 中”错误

python - 将值插入没有 NaN 的列

python - 如何获取反向排序列表的索引?

python - 如何修复: "All the input array dimensions except for the concatenation axis must match exactly" python

python - 在 Pandas 中使用 idxmax 保留重复值

python - 如何计算 groupby 中缺少信息的唯一组的数量?

.net - 如何在VB.Net中对System.Collections.Generic.List进行排序?

arrays - Swift - 排序数组类似于另一个