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-在一些样本中进行了测试,输出是相同的,因此删除了按两列进行排序的功能。刚刚意识到您需要求和。。。调整答案