我的问题很简单,但在我看的任何地方都找不到答案.
我希望在多索引pandas groupby对象中拥有组的数量.请注意,这与组(使用.size())中的元素数量不同,也不是组的总数(使用len.请参见此处).
最好用一个例子来说明.
让我们创建一个简单的数据帧:
import pandas as pd
df = pd.DataFrame({'Group': ['gr1','gr1','gr2','gr2','gr3','gr3'],
'Kind': ['sweet','sour','sweet','sour','sweet','sour'],
'Values': [10,11,200,201,300,301]})
Run Code Online (Sandbox Code Playgroud)
现在我们使用两列进行分组:
gr = df.groupby(['Group','Kind'])
Run Code Online (Sandbox Code Playgroud)
这将生成所需的groupby对象.它总共有六个组,您可以通过以下方式进行验证:
len(gr)
Run Code Online (Sandbox Code Playgroud)
我现在可以遍历这些组:
for key,group in gr:
print key
Run Code Online (Sandbox Code Playgroud)
这产生以下结果:
('gr1', 'sour')
('gr1', 'sweet')
('gr2', 'sour')
('gr2', 'sweet')
('gr3', 'sour')
('gr3', 'sweet')
Run Code Online (Sandbox Code Playgroud)
我们可以看到第一个键有3个唯一条目,第二个键有2个唯一条目.
我正在寻找的东西是gr返回(3,2)而无法访问生成的原始数据集,gr而无需遍历groupby对象,构建列表,以及查找其唯一元素.
我能想到的最短路可能是
>>> gr.dtypes.index.levshape
(3, 2)
Run Code Online (Sandbox Code Playgroud)
基本上,我们需要以MultiIndex的形式处理组:
>>> gr.dtypes
Group Kind Values
Group Kind
gr1 sour object object int64
sweet object object int64
gr2 sour object object int64
sweet object object int64
gr3 sour object object int64
sweet object object int64
>>> gr.dtypes.index
MultiIndex(levels=[['gr1', 'gr2', 'gr3'], ['sour', 'sweet']],
labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]],
names=['Group', 'Kind'])
>>> gr.dtypes.index.levels
FrozenList([['gr1', 'gr2', 'gr3'], ['sour', 'sweet']])
>>> gr.dtypes.index.levshape
(3, 2)
Run Code Online (Sandbox Code Playgroud)
原来我在想
>>> pd.Series(gr.groups).index.levshape
(3, 2)
Run Code Online (Sandbox Code Playgroud)
从groups字典中制作一个新索引,但看起来信息已经存在dtypes.
| 归档时间: |
|
| 查看次数: |
654 次 |
| 最近记录: |