Python 熊猫是更好的排序、分组和求和方法
对熊猫来说是新事物,所以想知道是否有一种更具泛石器时代风格的方法来对一些数据进行排序、分组,然后对部分数据求和。问题是在一系列值中找出3个最大值,然后只求和 人口普查cp是一个包含各州县信息的数据框架。我目前的解决办法是:Python 熊猫是更好的排序、分组和求和方法,python,pandas,Python,Pandas,对熊猫来说是新事物,所以想知道是否有一种更具泛石器时代风格的方法来对一些数据进行排序、分组,然后对部分数据求和。问题是在一系列值中找出3个最大值,然后只求和 人口普查cp是一个包含各州县信息的数据框架。我目前的解决办法是: cen_sort = census_cp.groupby('STNAME').head(3) cen_sort = cen_sort.groupby('STNAME').sum().sort_values(by='CENSUS2010POP', ascending=False
cen_sort = census_cp.groupby('STNAME').head(3)
cen_sort = cen_sort.groupby('STNAME').sum().sort_values(by='CENSUS2010POP', ascending=False).head(n=3)
cen_sort = cen_sort.reset_index()
print(cen_sort['STNAME'].values.tolist())
我特别想知道是否有更好的方法来实现这一点,以及为什么我不能将总和放在前一行的末尾,并将我认为明显相关的项目链在一起(将每个项目的前3个项目加在一起)。我想你可以先使用groupby
然后:
样本:
census_cp = pd.DataFrame({'STNAME':list('abscscbcdbcsscae'),
'CENSUS2010POP':[4,5,6,5,6,2,3,4,5,6,4,5,4,3,6,5]})
print (census_cp)
CENSUS2010POP STNAME
0 4 a
1 5 b
2 6 s
3 5 c
4 6 s
5 2 c
6 3 b
7 4 c
8 5 d
9 6 b
10 4 c
11 5 s
12 4 s
13 3 c
14 6 a
15 5 e
df = census_cp.groupby('STNAME') \
.apply(lambda x: x.head(3).sum(numeric_only=True)) \
.reset_index() \
.nlargest(3, 'CENSUS2010POP')
print (df)
STNAME CENSUS2010POP
5 s 17
1 b 14
2 c 11
如果每个组需要两个顶部3
,然后使用以下总和:
df1 = census_cp.groupby('STNAME')['CENSUS2010POP']
.apply(lambda x: x.nlargest(3).sum())
.nlargest(3)
.reset_index()
print (df1)
STNAME CENSUS2010POP
0 s 17
1 b 14
2 c 13
或:
值是按
排序的吗?head(3)
需要每个组的前3
值吗?当然,技术术语是“熊猫人”。喜欢最大的。对将不同的操作放在不同的行上感到好奇。这是熊猫中的首选语法,还是你只是为了易读而这么做?每个命令末尾是否还需要“\”?否,\n仅适用于python代码中的长行。如果省略了,python有时会返回错误。但可能只使用一行代码,但可读性较差。
df1 = census_cp.groupby('STNAME')['CENSUS2010POP']
.apply(lambda x: x.nlargest(3).sum())
.nlargest(3)
.reset_index()
print (df1)
STNAME CENSUS2010POP
0 s 17
1 b 14
2 c 13
df1 = census_cp.groupby('STNAME')['CENSUS2010POP'].nlargest(3)
.groupby(level=0)
.sum()
.nlargest(3)
.reset_index()
print (df1)
STNAME CENSUS2010POP
0 s 17
1 b 14
2 c 13