【问题标题】:creating a df of unique items and the max value of another column for each unique item创建唯一项目的 df 和每个唯一项目的另一列的最大值
【发布时间】: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 但我可能以错误的方式使用它们。 请帮助指导我。 蒂亚!

【问题讨论】:

    标签: python pandas dataframe jupyter-notebook pandas-groupby


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2015-08-23
      • 2017-06-26
      • 2014-09-30
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      相关资源
      最近更新 更多