Python 将多索引数据帧按其级别之一分组?
是否可以按多索引(2级)将数据帧按多索引级别之一分组Python 将多索引数据帧按其级别之一分组?,python,pandas,Python,Pandas,是否可以按多索引(2级)将数据帧按多索引级别之一分组 我知道的唯一方法是在多重索引上重置_索引,然后再次设置索引。我相信有更好的方法,我想知道怎么做 是,使用级别参数。看一看。例如: In [26]: s first second third bar doo one 0.404705 two 0.577046 baz bee one -1.715002 two -1.
我知道的唯一方法是在多重索引上重置_索引,然后再次设置索引。我相信有更好的方法,我想知道怎么做 是,使用
级别
参数。看一看。例如:
In [26]: s
first second third
bar doo one 0.404705
two 0.577046
baz bee one -1.715002
two -1.039268
foo bop one -0.370647
two -1.157892
qux bop one -1.344312
two 0.844885
dtype: float64
In [27]: s.groupby(level=['first','second']).sum()
first second
bar doo 0.981751
baz bee -2.754270
foo bop -1.528539
qux bop -0.499427
dtype: float64
如果已经有多个索引可用,则可以使用简单的位置号代替列名:
df = df.groupby(level=[0,1]).size()
在pandas的最新版本中,您可以按类似于列的多索引级别名称进行分组(即不使用
级别
关键字),从而允许您同时使用这两个索引级别
>>> import pandas as pd
>>> pd.__version__
'1.0.5'
>>> df = pd.DataFrame({
... 'first': ['a', 'a', 'a', 'b', 'b', 'b'],
... 'second': ['x', 'y', 'x', 'z', 'y', 'z'],
... 'column': ['k', 'k', 'l', 'l', 'm', 'n'],
... 'data': [0, 1, 2, 3, 4, 5],
... }).set_index(['first', 'second'])
>>> df.groupby('first').sum()
data
first
a 3
b 12
>>> df.groupby(['second', 'column']).sum()
data
second column
x k 0
l 2
y k 1
m 4
z l 3
n 5
您选择的列和索引级别名称必须是唯一的。如果列和索引级别具有相同的名称,则在尝试
groupby
时,会出现ValueError
?我得到了错误类型错误:无序类型:list()>int()