以下是我的数据框示例:
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种类型,因为我已经修复了它们的值。有没有人对此有所了解? 提前谢谢。
答案 0 :(得分: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