这实际上是一个非常好的迹象,你已经认识到必须有一个更简单的方法!每当你发现自己违反DRY原则(不要重复自己)时,你应该问你是否犯了一个失误。
虽然你可以通过使用词典字典而不是所有那些命名变量来删除大量的复制,但是因为你正在使用熊猫,我会利用
groupby
和
nlargest
相反,这给了我:
In [47]: dg = df.groupby([“AAR”, “BYDEL”], as_index=False)[“PERSONER”].sum()
In [48]: dg[dg.AAR == 1992].nlargest(3, “PERSONER”)
Out[48]:
AAR BYDEL PERSONER
2 1992 3 67251
1 1992 2 62221
3 1992 4 47854
</code>
首先,我们对AAR和BYDEL列进行分组,并在每个组中,我们获取PERSONER值并对它们求和。这给了我们一个开始的框架
n [51]: dg.head(15)
Out[51]:
AAR BYDEL PERSONER
0 1992 1 40595
1 1992 2 62221
2 1992 3 67251
3 1992 4 47854
4 1992 5 43688
5 1992 6 34303
6 1992 7 36746
7 1992 8 41668
8 1992 9 45305
9 1992 10 42748
10 1992 99 2187
11 1993 1 40925
12 1993 2 62583
13 1993 3 67783
14 1993 4 47589
</code>
然后我们选择AAR == 1992的行,以及具有3个最大PERSONER值的行。
ID
非常
建议通过阅读
熊猫教程
如果你要做这种类型的数据处理,否则你会发现自己重新发明轮子。