以下示例
import pandas as pd
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Ohio', 'Ohio',
'Nevada', 'Nevada','Nevada','Nevada'],
'year': [2000, 2000, 2000, 2002, 2002,
2002, 2002, 2002, 2002],
'pop': [1, 1, 1, 1, 1, 1, 1, 1, 1]}
df = pd.DataFrame(data)
输出
pop state year
0 1 Ohio 2000
1 1 Ohio 2000
2 1 Ohio 2000
3 1 Ohio 2002
4 1 Ohio 2002
5 1 Nevada 2002
6 1 Nevada 2002
7 1 Nevada 2002
8 1 Nevada 2002
我需要pop上的总和,对于每个州+年组合,然而,排序需要基于州级别。
所以我需要在计数内计数,在第一级完成订购。输出就像
state year sum
Ohio 2000 3
2002 2
Nev. 2002 4
正如你所看到的那样,俄亥俄州名列前茅,因为在总和5的情况下,整个团队有更多的项目。
显示是关键,我想只向俄亥俄州显示一次。
我相信我需要在Pandas上使用分层索引,但我无法弄清楚确切的语法。堆叠/取消堆叠在这里有用吗?
答案 0 :(得分:4)
stack()
和unstack()
可以帮助,是的,还有reindex()
:
In [11]: res = df.groupby(['state', 'year']).sum()
In [12]: res
Out[12]:
pop
state year
Nevada 2001 1
2002 3
Ohio 2000 3
2002 2
In [13]: st = np.sort(df.groupby('state')['pop'].sum())[::-1]
In [14]: st
Out[14]:
state
Ohio 5
Nevada 4
Name: pop
In [15]: res.unstack().reindex(st.index).stack()
Out[15]:
pop
state year
Ohio 2000 3
2002 2
Nevada 2001 1
2002 3
虽然我不确定它是否是最优雅的解决方案。我让pandas
功夫大师在这里说出他们的智慧之词。