我有一个数据框,其中包含有关用户的一些信息。有一个用于用户的列,一个用于类型的列,以及一个用于计数的列,例如:
name type count
robert x 123
robert y 456
robert z 5123
charlie x 442123
charlie y 0
charlie z 42
我试图找出每种名称中具有最高计数的类型,因此在这种情况下,我想选择以下类型:
name type count
robert z 5123
charlie x 442123
我知道我可以这样做以获取每个名称的最大数量,但是我不确定如何添加“类型”列,这实际上是最重要的
df.sort_values('count', ascending=False).drop_duplicates('name').sort_index()
非常感谢您的帮助!
答案 0 :(得分:3)
只需按名称和数量排序,按名称分组并保持在第一位即可。
df.sort_values(['name', 'count'],ascending=False).groupby(['name']).first().reset_index()
会给您:
name type count
3 charlie x 442123
2 robert z 5123
答案 1 :(得分:0)
尝试一下
df.loc[df.groupby('name')['count'].idxmax()]['type']
name type count
3 charlie x 442123
2 robert z 5123
如果您不仅希望获得一个最大值,而且还希望每个组都可以提供最高的n
值(例如n = 2
)
df.loc[df.groupby('name')['count'].nlargest(2).index.get_level_values(1)]
name type count
3 charlie x 442123
5 charlie z 42
2 robert z 5123
1 robert y 456
答案 2 :(得分:0)
如果一个名称具有两个不同类型的最大值,该怎么办?
print(df)
name type count
0 robert x 123
1 robert y 456
2 robert z 5123
3 robert a 5123
4 charlie x 442123
5 charlie y 0
6 charlie z 42
使用布尔索引:
df[df['count'] == df.groupby('name')['count'].transform('max')]
输出:
name type count
2 robert z 5123
3 robert a 5123
4 charlie x 442123