如果我有一张考试成绩表,想知道每个科目谁最好谁最差。
输入表的示例:
| 主题|得分|姓名|
| - ------|- ------|- ------|
| 数学|二十七|学生1|
| 历史|四十三|学生2|
| 数学|四十四|学生3|
| 历史|五十|学生1|
| 科学类|七|学生1|
| 历史记录|十个|学生3|
| 科学|四十三|学生2|
我想使输出表如下表:
| 主题|最佳评分|最佳种马|最差Scr|最差螺柱|
| - ------|- ------|- ------|- ------|- ------|
| 数学|四十四|学生3|二十七|学生1|
| 历史|五十|学生1|十个|学生3|
| 科学|四十三|学生2|七|学生1|
下面的代码是我尝试:
inputTableGrouped = inputTable.groupby(['Subject'])
outputTableGrouped['BestScr'] = inputTableGrouped.Score.max()
outputTableGrouped['WorstScr'] = inputTableGrouped.Score.min()
outputTable = outputTableGrouped.reset_index()
但是这样的话,我找不到记录学生姓名的方法,我该怎么做呢?
3条答案
按热度按时间kkbh8khc1#
您可以将
GroupBy.agg
与DataFrameGroupBy.idxmax
和DataFrameGroupBy.idxmin
一起用于按最大和最小Score
的索引,并使用DataFrame.loc
选择匹配行,使用DataFrame.add_prefix
将Subject
转换为索引,然后连接在一起:或者将
Name
转换为索引,这样您就可以将GroupBy.agg
与DataFrameGroupBy.idxmax
、DataFrameGroupBy.idxmin
以及min
一起使用max
函数:jyztefdp2#
您可以使用自定义
groupby.agg
:输出:
tzdcorbm3#
另一种可能的解决方案基于
pandas.DataFrame.unstack
:输出: