Pandas groupby 类别,评分,从每个类别中获得最高价值? |
您所在的位置:网站首页 › python选手评分 › Pandas groupby 类别,评分,从每个类别中获得最高价值? |
回答问题
关于 SO 的第一个问题,对 pandas 来说非常新,并且在术语上仍然有点不稳定:我正在尝试找出数据帧上正确的语法/操作序列,以便能够按 B 列分组,找到最大值(或最小值) 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...这对于这个假装的数据框来说很好,但在使用更大的数据框时并没有多大帮助。 非常感谢! Answers如果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 9idxmax返回索引值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 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |