创建唯一项目的 df 和每个唯一项目的另一列的最大值
Posted
技术标签:
【中文标题】创建唯一项目的 df 和每个唯一项目的另一列的最大值【英文标题】:creating a df of unique items and the max value of another column for each unique item 【发布时间】:2021-11-21 21:20:32 【问题描述】:我有一个看起来像这样的 DataFrame:
地点|大学 |领域 |学生人数 |纽约 |纽约大学 |时尚 |女 | 1000 |纽约 |纽约大学 |时尚 |男 | 500 | |纽约 |纽约大学 |计算机科学 |女 | 300 | |纽约 |纽约大学 |计算机科学 |男 |3050 | |纽约 |纽约大学 |生物 |女 | 350 | |纽约 |纽约大学 |生物 |男 | 400 | |德州 |犹他州 |时尚 |女 | 600 | |德州 |犹他州 |时尚 |男 | 100 | |德州 |犹他州 |计算机科学 |女 | 500 | |德州 |犹他州 |计算机科学 |男 |5050 | |德州 |犹他州 |生物 |女 | 650 | |德州 |犹他州 |生物 |男 | 700 |
仅使用 Pandas,我需要找到所有独特的学习领域,然后为每个领域找到学生最多的州:
|领域 |地点 |学生人数| |时尚 |纽约 | 1500 | |计算机科学 |德州 | 5550 | |生物 |德州 |第1350章|
我知道我们必须按字段分组,但我无法得到学生的总和,然后是学生人数最多的那个(第 2 列和第 3 列)。我试过 agg 和 count 但我可能以错误的方式使用它们。 请帮助指导我。 蒂亚!
【问题讨论】:
【参考方案1】:你可以这样做
>>> 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.sort_values(['Field','Number of students'],ascending=False).drop_duplicates(subset='Field') 这样每个字段将只保留最多的学生【参考方案2】:df.groupby(['State', 'Place', 'Field']).sum('Nos').groupby('Field').max()
【讨论】:
以上是关于创建唯一项目的 df 和每个唯一项目的另一列的最大值的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 查询构建器以选择具有唯一列值的多行(具有另一列的最大值)