1

对于下面的示例

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 上使用分层索引,但是我无法弄清楚确切的语法。stack / unstack 在这里有用吗?

4

1 回答 1

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功夫大师在这里说出他们的智慧之言。

于 2013-04-19T18:49:59.347 回答