3 回答
TA贡献1815条经验 获得超6个赞
这需要最后一个。虽然不是最大:
In [10]: df.drop_duplicates(subset='A', keep="last")
Out[10]:
A B
1 1 20
3 2 40
4 3 10
您还可以执行以下操作:
In [12]: df.groupby('A', group_keys=False).apply(lambda x: x.loc[x.B.idxmax()])
Out[12]:
A B
A
1 1 20
2 2 40
3 3 10
TA贡献1859条经验 获得超6个赞
首要的答案是做太多的工作,对于较大的数据集来说看起来很慢。apply速度慢,应尽可能避免。ix已弃用,也应避免使用。
df.sort_values('B', ascending=False).drop_duplicates('A').sort_index()
A B
1 1 20
3 2 40
4 3 10
或简单地按所有其他列分组并获取所需的最大列数。 df.groupby('A', as_index=False).max()
TA贡献1875条经验 获得超3个赞
这是我必须解决的一个变体,值得分享:对于其中的每个唯一字符串,columnA我想在中找到最常见的关联字符串columnB。
df.groupby('columnA').agg({'columnB': lambda x: x.mode().any()}).reset_index()
在.any()是否有对应的模式领带挑选一个。(请注意,.any()在一系列上使用会int返回布尔值,而不是选择其中一个。)
对于原始问题,相应的方法简化为
df.groupby('columnA').columnB.agg('max').reset_index()。
添加回答
举报