为每个唯一项目创建一个唯一项目的 df 和另一列的最大值

creating a df of unique items and the max value of another column for each unique item

我有一个看起来像这样的 DataFrame:

地点|大学 |领域 |学生人数
|纽约 |纽约大学 |时尚 |女 | 1000
|纽约 |纽约大学 |时尚 |男 | 500 |
|纽约 |纽约大学 |反恐精英 |女 | 300 |
|纽约 |纽约大学 |反恐精英 |男 |3050 |
|纽约 |纽约大学 |简介 |女 | 350 |
|纽约 |纽约大学 |简介 |男 | 400 |
|德州 |得克萨斯州 |时尚 |女 | 600 |
|德州 |得克萨斯州 |时尚 |男 | 100 |
|德州 |得克萨斯州 |反恐精英 |女 | 500 |
|德州 |得克萨斯州 |反恐精英 |男性 |5050 |
|德州 |得克萨斯州 |简介 |女 | 650 |
|德州 |得克萨斯州 |简介 |男 | 700 |

仅使用 Pandas,我需要找到所有独特的研究领域,然后为每个研究领域找到学生最多的州:

|领域 |地点 |学生人数|
|时尚 |纽约 | 1500 |
|反恐精英 |德州 | 5550 |
|简介 |德州 |第1350章|

我知道我们必须按字段分组,但我无法获得学生总数,然后是学生人数最多的那个(第 2 列和第 3 列)。我试过 agg 和 count 但我可能以错误的方式使用它们。 请帮助指导我。 TIA!

你可以做到

>>> df = df.groupby(['Place','Field'])['Number of students'].sum().reset_index()
      Place    Field  Number of students
0  New York       CS                 500
1  New York  Fashion                1500
2     Texas      Bio                 200
3     Texas       CS                 700
>>> df.sort_values('Number of students',ascending=False)
      Place    Field  Number of students
1  New York  Fashion                1500
3     Texas       CS                 700
0  New York       CS                 500
2     Texas      Bio                 200
df.groupby(['State', 'Place', 'Field']).sum('Nos').groupby('Field').max()