我有一个数据框,其中包含有关用户的一些信息。有一列用于用户,一列用于类型,一列用于计数,如下所示:
name type count
robert x 123
robert y 456
robert z 5123
charlie x 442123
charlie y 0
charlie z 42
Run Code Online (Sandbox Code Playgroud)
我试图找出每个名称的计数最高的类型,所以对于这种情况,我想选择这个:
name type count
robert z 5123
charlie x 442123
Run Code Online (Sandbox Code Playgroud)
我知道我可以做这样的事情来获得每个名称的最大计数,但我不确定如何包含“类型”列,这实际上是最重要的
df.sort_values('count', ascending=False).drop_duplicates('name').sort_index()
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏!
尝试这个
df.loc[df.groupby('name')['count'].idxmax()]['type']
Run Code Online (Sandbox Code Playgroud)
name type count
3 charlie x 442123
2 robert z 5123
Run Code Online (Sandbox Code Playgroud)
如果您不仅想要一个最大值,而且想要n每个组的最高值,您可以这样做(例如n = 2)
df.loc[df.groupby('name')['count'].nlargest(2).index.get_level_values(1)]
Run Code Online (Sandbox Code Playgroud)
name type count
3 charlie x 442123
5 charlie z 42
2 robert z 5123
1 robert y 456
Run Code Online (Sandbox Code Playgroud)
只需按名称排序并计数,按名称分组并保留在第一位即可。
df.sort_values(['name', 'count'],ascending=False).groupby(['name']).first().reset_index()
Run Code Online (Sandbox Code Playgroud)
会给你:
name type count
3 charlie x 442123
2 robert z 5123
Run Code Online (Sandbox Code Playgroud)
如果不同类型的名称有两个最大值怎么办:
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
Run Code Online (Sandbox Code Playgroud)
使用布尔索引:
df[df['count'] == df.groupby('name')['count'].transform('max')]
Run Code Online (Sandbox Code Playgroud)
输出:
name type count
2 robert z 5123
3 robert a 5123
4 charlie x 442123
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7039 次 |
| 最近记录: |