创建唯一项目的 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 和每个唯一项目的另一列的最大值的主要内容,如果未能解决你的问题,请参考以下文章

仅当值存在于 SQL 的另一列中时,如何选择列的值?

Laravel - 查询构建器以选择具有唯一列值的多行(具有另一列的最大值)

对于每个类别,如何找到与另一列的最小值对应的列的值?

将一列中子组的最大值与 R 中的另一列相关联

如何选择与 PostgreSQL 中另一列的最高值的唯一列值对对应的行?

与 data.table 合并数据以重复唯一值