Pandas按类别、等级分组,从每个类别中获取最高价值?[英] Pandas groupby category, rating, get top value from each category?

本文是小编为大家收集整理的关于Pandas按类别、等级分组,从每个类别中获取最高价值?的处理方法,想解了Pandas按类别、等级分组,从每个类别中获取最高价值?的问题怎么解决?Pandas按类别、等级分组,从每个类别中获取最高价值?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

第一个问题,对熊猫非常新,对术语仍然有些动摇:我试图找出数据框架上适当的语法/操作顺序,以便能够按B列进行分组,找到最大(或min)C列中每个组的相应值,并在A中检索该组的相应值.

中的相应值

假设这是我的数据框:

name     type      votes     
bob       dog        10
pete      cat         8
fluffy    dog         5
max       cat         9

使用df.groupby('type').votes.agg('max')返回:

dog     10
cat      9

到目前为止,一切都很好.但是,我想弄清楚如何返回:

dog    10    bob
cat     9    max 

我已经达到了df.groupby(['type', 'votes']).name.agg('max'),尽管返回

dog   5    fluffy
      10   bob
cat   8    pete
      9    max

...这对此假装数据框架很好,但是在使用更大的数据时没有帮助.

非常感谢!

推荐答案

如果df具有没有重复值的索引,则可以使用 idxmax 返回每个组的最大行的索引.然后使用df.loc选择整个行:

In [322]: df.loc[df.groupby('type').votes.agg('idxmax')]
Out[322]: 
  name type  votes
3  max  cat      9
0  bob  dog     10

如果df.index具有重复值,即不是唯一的索引,则首先使索引唯一:

df = df.reset_index()

然后使用idxmax:

result = df.loc[df.groupby('type').votes.agg('idxmax')]

如果您真的需要,则可以返回df到其原始状态:

df = df.set_index(['index'], drop=True)

,但在一般生活中,有一个独特的索引要好得多.


这是一个示例,显示df没有唯一的问题 指数.假设index是AABB:

import pandas as pd
df = pd.DataFrame({'name': ['bob', 'pete', 'fluffy', 'max'],
                   'type': ['dog', 'cat', 'dog', 'cat'],
                   'votes': [10, 8, 5, 9]}, 
                  index=list('AABB'))
print(df)
#      name type  votes
# A     bob  dog     10
# A    pete  cat      8
# B  fluffy  dog      5
# B     max  cat      9

idxmax返回索引值A和B:

print(df.groupby('type').votes.agg('idxmax'))
type
cat    B
dog    A
Name: votes, dtype: object

但A和B请勿唯一指定所需的行. df.loc[...] 返回所有索引值为A或B的行:

print(df.loc[df.groupby('type').votes.agg('idxmax')])
#      name type  votes
# B  fluffy  dog      5
# B     max  cat      9
# A     bob  dog     10
# A    pete  cat      8

相反,如果我们重置索引:

df = df.reset_index()
#   index    name type  votes
# 0     A     bob  dog     10
# 1     A    pete  cat      8
# 2     B  fluffy  dog      5
# 3     B     max  cat      9

然后df.loc可用于选择所需的行:

print(df.groupby('type').votes.agg('idxmax'))
# type
# cat    3
# dog    0
# Name: votes, dtype: int64

print(df.loc[df.groupby('type').votes.agg('idxmax')])
#   index name type  votes
# 3     B  max  cat      9
# 0     A  bob  dog     10

其他推荐答案

df= df.groupby('type').agg({'votes': ['count','mean','median','min','max']})
print(ds_method_range)

本文地址:https://www.itbaoku.cn/post/1727898.html