Pandas 多索引计数级别
Pandas Multiindex count on levels
数据:
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
但是必须有更简洁的方法来获得相同的结果吗?我是否遗漏了一些明显的东西?
好像有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
数据:
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
但是必须有更简洁的方法来获得相同的结果吗?我是否遗漏了一些明显的东西?
好像有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