Python 熊猫:如何对多级数据帧中的子级别的最大3个值求和
我的数据框如下所示。对其进行排序,以便“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 547853Python 熊猫:如何对多级数据帧中的子级别的最大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
请确保在对数据帧进行排序后重新分配,可能您想调用排序后的结果 根据州级别分组或级别=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
可能的重复可能的重复