pandas 按第一列值分组并找到剩余列的最大值

我有一个熊猫数据框

import pandas as pd
  
country = ['US','US','UK','Canada',"Mexico"]
rating =  [0,2,1,4,3,1]
count = [1,1]  

df = pd.DataFrame(list(zip(country,rating,count)),columns =['country','rating','count'])

导致以下数据框

    country rating  count
0   US         0    1
1   US         2    2
2   US         1    3
3   UK         4    1
4   UK         3    2
5   Canada     1    1
6   Canada     0    2
7   Mexico     1    1

我想要做的是按第一列值分组,并为各个组找到第二列和第三列的最大值。所以输出数据帧如下:

    country rating  count
0   US         2    3
1   UK         4    2
2   Canada     1    2
3   Mexico     1    1
InitialQwertyJGW 回答:pandas 按第一列值分组并找到剩余列的最大值

您可以使用 groupby 函数。

df.groupby(['country']).max()
         rating  count
country               
Canada        1      2
Mexico        1      1
UK            4      2
US            2      3

如果您不希望您的索引是国家/地区名称,您可以重置它。

new_df = df.groupby(['country']).max()
new_df.reset_index(inplace=True)
  country  rating  count
0  Canada       1      2
1  Mexico       1      1
2      UK       4      2
3      US       2      3

编辑

感谢 @Henry Ecker 指出,没有国名索引的 grupby 可以通过以下行获得:

df.groupby(['country'],as_index=False).max()
,

使用 DataFrame.groupbyGroupBy.max

df.groupby("country").max()
         rating  count
country
Canada        1      2
Mexico        1      1
UK            4      2
US            2      3
,

使用 groupbyagg 保持每列的最大值:

>>> df.groupby('country').agg({'rating': max,'count': max}).reset_index()

  country  rating  count
0  Canada       1      2
1  Mexico       1      1
2      UK       4      2
3      US       2      3

我的答案是比其他答案更一般的情况,因为如果您想要一列的最大值和另一列的最小值,您可以使用 agg

本文链接:https://www.f2er.com/20194.html

大家都在问