首页 > 解决方案 > 聚合列组

问题描述

基于数据框

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(2, 6)), columns=list('ABCDEF'))
print(df)
   A   B   C   D   E   F
0  82  63  71  74  71  27
1  90   9  74  35  38  43

如何计算每个不相交的三列组的平均值,以便生成的数据框看起来像

   meanABC meanDEF
0  72      57.33
1  57.66   38.66 

?

标签: pythonpandas

解决方案


想法是MultiIndex首先创建,然后获取新列名称rename,最后可能mean由第二级使用MultiIndex

np.random.seed(2019)
df = pd.DataFrame(np.random.randint(0,100,size=(2, 6)), columns=list('ABCDEF'))
print(df)
    A   B   C   D   E   F
0  72  31  37  88  62  24
1  29  15  12  16  48  71

df.columns = [df.columns, np.arange(len(df.columns)) // 3]

c = 'mean' + df.columns.to_frame().groupby(1)[0].apply(''.join)
print (c)
1
0    meanABC
1    meanDEF
Name: 0, dtype: object

df = df.mean(axis=1, level=1).rename(columns=c)
print (df)
     meanABC  meanDEF
0  46.666667     58.0
1  18.666667     45.0

推荐阅读