【问题标题】:Grouping and ordering at one level, showing counts on another在一个级别分组和排序,在另一个级别显示计数
【发布时间】:2013-04-20 05:24:24
【问题描述】:

下面的例子

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

我需要对每个州和年份的组合进行总和,但是,排序需要基于州级别。

所以我需要计数中的计数,并在第一级完成排序。输出是这样的

  state  year  sum
   Ohio  2000  3
         2002  2
   Nev.  2002  4

如您所见,俄亥俄州位居榜首,因为总和为 5,其总组数更多。

展示是关键,我只想展示一次俄亥俄州。

我相信我需要在 Pandas 上使用分层索引,但是我无法弄清楚确切的语法。 stack / unstack 在这里有用吗?

【问题讨论】:

  • 2001 年内华达州发生了什么?您可以编辑以包含您想要的输出吗?

标签: python pandas


【解决方案1】:

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功夫高手在这里畅所欲言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2020-12-13
    • 2021-10-24
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多