Python 多索引级别上的groupby并删除分组级别

Python 多索引级别上的groupby并删除分组级别,python,pandas,pandas-groupby,multi-index,Python,Pandas,Pandas Groupby,Multi Index,我正在pandas dataframe上执行groupby操作,作为示例,它可能如下所示: 将熊猫作为pd导入 将numpy作为np导入 数字=[0,1,2] 颜色=['绿色','紫色'] mx=pd.MultiIndex.from_产品([colors,number],name=['color','numbers')) 值=np.random.rand(6) df=pd.DataFrame(值,mx) df=df.drop(索引=(“绿色”,2)) (索引示例来自) 然后我想在一个级别上执行

我正在pandas dataframe上执行groupby操作,作为示例,它可能如下所示:

将熊猫作为pd导入
将numpy作为np导入
数字=[0,1,2]
颜色=['绿色','紫色']
mx=pd.MultiIndex.from_产品([colors,number],name=['color','numbers'))
值=np.random.rand(6)
df=pd.DataFrame(值,mx)
df=df.drop(索引=(“绿色”,2))
(索引示例来自)

然后我想在一个级别上执行一个组操作,例如
“color”
,但我不想让color作为一个索引保留在分组的
系列中,因为它变得多余

df.groupby(“颜色”)中的系列键的
:
打印(f“{key=}”)
打印(f“预期索引:{series.index.droplevel('color')。到_list()}”)
打印(f“实际索引:{series.index.to_list()}”)
打印()
哪些产出:

key = 'green'
Expected index: [0, 1]
Actual index: [('green', 0), ('green', 1)]

key = 'purple'
Expected index: [0, 1, 2]
Actual index: [('purple', 0), ('purple', 1), ('purple', 2)]
由于分组级别
“color”
对于每个分组都是相同的,因此它是多余的,我只需要
“number”
的级别值


我可以像这里那样在循环中降低级别,但我想知道是否还有其他方法可以实现这一点,但我错过了?

IIUC,您可以简单地用键索引您的数据帧片段:

for key, series in df.groupby("color"):
    print(f'Key: {key}')
    print(series.loc[key])
    print('\n')
输出:

Key: green
                0
numbers          
0        0.913962
1        0.457205


Key: purple
                0
numbers          
0        0.939128
1        0.778389
2        0.715971
green
                0
numbers          
0        0.161444
1        0.403312
purple
                0
numbers          
0        0.369750
1        0.222223
2        0.565426

看起来您希望循环第一级值。你可以试试:

for color in df.index.get_level_values('color').unique():
    series = df.loc[color]
    print(color)
    print(series)
输出:

Key: green
                0
numbers          
0        0.913962
1        0.457205


Key: purple
                0
numbers          
0        0.939128
1        0.778389
2        0.715971
green
                0
numbers          
0        0.161444
1        0.403312
purple
                0
numbers          
0        0.369750
1        0.222223
2        0.565426

你到底想用
groupby
做什么操作?@QuangHoang在这种情况下,我正在循环分组来绘制它们,我需要颜色(或动物)作为标签,数字作为x,值作为y。但是我可以想象还有其他的用例。谢谢,在我的例子中,这是可行的,但是如果我看的是标签可以是两个级别的组,这是行不通的。您还可以使用
df.index.unique(“颜色”)
,这样可读性更好。