Python 是否使用另一列的最大值进行聚合分组?

Python 是否使用另一列的最大值进行聚合分组?,python,pandas,Python,Pandas,目前,我正在使用新冠病毒数据集进行一些深入研究 数据集的格式如下: Country Province Lat Lon Date Cases Status 0 Thailand 15.0000 101.0000 2020-01-22 00:00:00+00:00 2 confirmed 1 Thailand 15.0000 101.0000 2020-01-23 00:0

目前,我正在使用新冠病毒数据集进行一些深入研究

数据集的格式如下:

    Country Province    Lat Lon         Date                    Cases   Status
0   Thailand        15.0000 101.0000    2020-01-22 00:00:00+00:00   2   confirmed
1   Thailand        15.0000 101.0000    2020-01-23 00:00:00+00:00   3   confirmed
2   Thailand        15.0000 101.0000    2020-01-24 00:00:00+00:00   5   confirmed
3   Thailand        15.0000 101.0000    2020-01-25 00:00:00+00:00   7   confirmed
4   Thailand        15.0000 101.0000    2020-01-26 00:00:00+00:00   8   confirmed
我想按国家分组,在“Cases”列上求和(我们称之为case sum列),但我遇到了纬度和经度的问题:我想取case列的max的lat/long。换句话说,我想从纬度和经度的行与最大的案件数量。为了澄清,用例是,像法国这样的国家有多个纬度和经度的行(比如法属波利尼西亚),但我只想从案例最多的地区取分组中的lat/long

我目前正在运行一个聚合,如下所示:

nonzero_cases[(nonzero_cases['Date'] == "03/13/2020")].groupby("Country").agg({"Lat":"first","Lon":"first","Cases":"sum"})
这将产生:

Country     Lat     Lon     Cases
Afghanistan 33.0000 65.0000 7
Albania 41.1533 20.1683 33
Algeria 28.0339 1.6596  26
Andorra 42.5063 1.5218  1
...
但这并不是我想要的,因为它不考虑案例编号,只选择第一个Lat/Lon。

按列添加
案例
,所以现在第一个值是每组最多
案例的行:

print (df)
    Country   Lat    Lon                       Date  Cases     Status
0  Thailand  15.0  101.0  2020-01-22 00:00:00+00:00      2  confirmed
1  Thailand  15.0  101.0  2020-01-23 00:00:00+00:00      3  confirmed
2  Thailand  15.0  101.0  2020-01-24 00:00:00+00:00      5  confirmed
3  Thailand  15.0  101.0  2020-01-25 00:00:00+00:00      7  confirmed
4  Thailand  14.0  103.0  2020-01-26 00:00:00+00:00      8  confirmed <- changed data

df1 = (df.sort_values('Cases', ascending=False)
         .groupby("Country")
         .agg({"Lat":"first","Lon":"first","Cases":"sum"}))

print (df1)
           Lat    Lon  Cases
Country                     
Thailand  14.0  103.0     25
打印(df)
国家Lat Lon日期案例状态
泰国15.0 101.0 2020-01-22 00:00:00+00:00 2已确认
1泰国15.0 101.0 2020-01-23 00:00:00+00:00 3已确认
泰国15.0 101.0 2020-01-24 00:00:00+00:00 5已确认
泰国15.0 101.0 2020-01-25 00:00:00+00:00 7确认

4泰国14.0 103.0 2020-01-26 00:00:00+00:00 8证实了一个比耶斯雷尔的答案更混乱的答案,但它完成了任务。不幸的是,groupby、np.where、.loc当然还有pd.merge是我50%的熊猫的目标

nonzero_cases_agg = (nonzero_cases.groupby("Country")
                     .agg({"Cases":["sum","max"]}).reset_index())
df = pd.merge(nonzero_cases, nonzero_cases_agg, how='left', on='Country')
df = df.loc[df['Cases'] == df[('Cases', 'max')]].copy()
df['Cases'] = df[('Cases', 'sum')]
df = df.drop([('Cases', 'max'), ('Cases', 'sum')], axis=1)
df

谢谢这其实很有道理。出于好奇,是否也需要按国家或案例进行排序?@rb612-Ya,这取决于您,没有必要。@rb612-在一些样本中进行了测试,输出是相同的,因此删除了按两列进行排序的功能。刚刚意识到您需要求和。。。调整答案