Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:如何对多级数据帧中的子级别的最大3个值求和_Python_Pandas_Sorting_Dataframe_Sum - Fatal编程技术网

Python 熊猫:如何对多级数据帧中的子级别的最大3个值求和

Python 熊猫:如何对多级数据帧中的子级别的最大3个值求和,python,pandas,sorting,dataframe,sum,Python,Pandas,Sorting,Dataframe,Sum,我的数据框如下所示。对其进行排序,以便“POP”相对于每个“状态”按降序排列。现在我想对每个“状态”的“POP”的最大三个值求和,我应该怎么做 作为pd进口熊猫 d=['X','q',123383],'X','w',43857349],'X','e',236657],'X','r',23574594], [Y',t',547853],'Y','Y',46282134],'Y','u',43857439],'Y','i',32654893],'Y','i',95678312]] df=pd.Dat

我的数据框如下所示。对其进行排序,以便“POP”相对于每个“状态”按降序排列。现在我想对每个“状态”的“POP”的最大三个值求和,我应该怎么做

作为pd进口熊猫 d=['X','q',123383],'X','w',43857349],'X','e',236657],'X','r',23574594], [Y',t',547853],'Y','Y',46282134],'Y','u',43857439],'Y','i',32654893],'Y','i',95678312]] df=pd.DataFramed,列=['STATE','COUNTY','POP'] df.sort_值['STATE','POP'],升序=[True,False]。设置_索引['STATE','COUNTY'] 打印输出 已排序的(u df): 流行音乐 州县 X w 43857349 r 23574594 e 236657 问题123383 Y i 95678312 y 46282134 u 43857439 我是32654893 t 547853
请确保在对数据帧进行排序后重新分配,可能您想调用排序后的结果

根据州级别分组或级别=0,假设它是州和县的多指数,然后应用lambda,取前三名的开头,假设数据按每个州的人口降序排序,并对结果求和

top_n = 3
df = df.sort_values(['STATE','POP'], ascending=[True, False]).set_index(['STATE','COUNTY'])
>>> df.groupby(level='STATE').apply(lambda x: x.head(top_n).sum())
             POP
STATE           
X       67668600  # w: 43857349 + r: 23574594 + e: 236657
Y      185817885  # i: 95678312 + y: 46282134 + u: 43857439

请确保在对数据帧进行排序后重新分配,可能您想调用排序后的结果

根据州级别分组或级别=0,假设它是州和县的多指数,然后应用lambda,取前三名的开头,假设数据按每个州的人口降序排序,并对结果求和

top_n = 3
df = df.sort_values(['STATE','POP'], ascending=[True, False]).set_index(['STATE','COUNTY'])
>>> df.groupby(level='STATE').apply(lambda x: x.head(top_n).sum())
             POP
STATE           
X       67668600  # w: 43857349 + r: 23574594 + e: 236657
Y      185817885  # i: 95678312 + y: 46282134 + u: 43857439
有一个不需要预排序的NLAGEST:

df.groupby(['STATE']).POP.nlargest(3)
给你

STATE   
X      1    43857349
       3    23574594
       2      236657
Y      8    95678312
       5    46282134
       6    43857439
Name: POP, dtype: int64
如果你只关心金额:

df.groupby(['STATE']).POP.nlargest(3).sum(level=0)
给出:

STATE
X     67668600
Y    185817885
Name: POP, dtype: int64
有一个不需要预排序的NLAGEST:

df.groupby(['STATE']).POP.nlargest(3)
给你

STATE   
X      1    43857349
       3    23574594
       2      236657
Y      8    95678312
       5    46282134
       6    43857439
Name: POP, dtype: int64
如果你只关心金额:

df.groupby(['STATE']).POP.nlargest(3).sum(level=0)
给出:

STATE
X     67668600
Y    185817885
Name: POP, dtype: int64
可能的重复可能的重复