【问题标题】:Pandas Multiindex count on levelsPandas Multiindex 计数级别
【发布时间】:2020-02-14 09:03:55
【问题描述】:

数据:

index = [('A', 'aa', 'aaa'),
         ('A', 'aa', 'aab'),
         ('B', 'bb', 'bbb'),
         ('B', 'bb', 'bbc'),
         ('C', 'cc', 'ccc')
        ]
values = [0.07, 0.04, 0.04, 0.06, 0.07]

s = pd.Series(data=values, index=pd.MultiIndex.from_tuples(index))

s
A  aa  aaa    0.07
       aab    0.04
B  bb  bbb    0.04
       bbc    0.06
C  cc  ccc    0.07

要获得前两个级别的平均值很容易:

s.mean(level=[0,1])

结果:

A  aa    0.055
B  bb    0.050
C  cc    0.070

但是要计算前两个级别的工作方式不同:

#s.count(level=[0,1]) # does not work

我可以解决:

s.reset_index().groupby(['level_0', 'level_1']).size()

level_0  level_1
A        aa         2
B        bb         2
C        cc         1

但是必须有一种更简洁的方法来获得相同的结果吗?我错过了什么明显的东西吗?

【问题讨论】:

    标签: pandas count series multi-index


    【解决方案1】:

    好像是bug,可以用:

    print (s.groupby(level=[0,1]).size())
    #with exclude NaNs
    #print (s.groupby(level=[0,1]).count())
    A  aa    2
    B  bb    2
    C  cc    1
    dtype: int64
    

    【讨论】:

    • 从没想过 Series 有一个“groupby”方法 :) 这很有帮助,我接受答案是更简洁的方法,但也许有人可以确认没有“计数方法”替代速度和效率?
    • @arvyzu - 似乎还没有;(
    猜你喜欢
    • 2018-11-09
    • 2015-05-22
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2022-01-04
    • 2020-05-19
    相关资源
    最近更新 更多