首页 > 解决方案 > Pandas:索引和列中的分组名称

问题描述

我有一个对索引和列都使用 MultiIndex 的数据框。例如:

df = pd.DataFrame(index=pd.MultiIndex.from_product([[1,2], [1,2,3], [4,5]], names=['i','j', 'k']), columns=pd.MultiIndex.from_product([[1,2], [1,2]], names=['x', 'y']))
for c in df.columns:
    df[c] = np.random.randint(100, size=(12,1))

x       1       2
y       1   2   1   2
i j k
1 1 4  10  13   0  76
    5  92  37  52  40
  2 4  88  77  50  22
    5  75  31  19   1
  3 4  61  23   5  47
    5  43  68  10  21
2 1 4  23  15  17   5
    5  47  68   6  94
  2 4   0  12  24  54
    5  83  27  46  19
  3 4   7  22   5  15
    5   7  10  89  79

我想按索引中的名称和列中的名称对值进行分组。对于每个这样的组,我们将有一个二维数字数组(而不是一个系列)。我想聚合std()该二维数组中的所有条目。

例如,假设我 groupby ['i', 'x'],一组将具有i=1and的值x=1。我想为std这些 2D 数组中的每一个进行计算,并生成一个DataFramei作为索引,x值作为列的值。

实现这一目标的最佳方法是什么?

如果我确实stack()x作为索引,我仍然会计算几个std()而不是一个,因为仍然会有多个列。

标签: pythonpandaspandas-groupby

解决方案


您可以使用stack将列的“y”级别作为索引,然后groupby只有 i 才能获得:

print (df.stack(level='y').groupby(['i']).std())
x          1          2
i                      
1  32.966811  23.933462
2  28.668825  28.541835

推荐阅读