Python 多索引级别上的groupby并删除分组级别
我正在pandas dataframe上执行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)) (索引示例来自) 然后我想在一个级别上执行
将熊猫作为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(“颜色”)
,这样可读性更好。