Python 在列组上聚合

Python 在列组上聚合,python,pandas,Python,Pandas,基于数据帧 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 如何计算三列中每个不相交组的平均值,使生成的数据帧看起来像 mean

基于数据帧

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 

想法是首先创建
多索引
,然后为
重命名
获取新的列名,最后是通过第二级
多索引
使用
平均值

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

尝试以下方法,希望这有所帮助:

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   2  89  68  48  13  17
1  43   9  98   9  18  94
    meanABC     meanDEF
0   53.0    26.000000
1   50.0    40.333333
现在按照以下步骤操作:

columns = list(df.columns)
new_df = pd.DataFrame()
for i in range(0,len(columns),3):
    new_df['mean'+"".join(columns[i:i+3])] = df[columns[i:i+3]].mean(axis=1)
输出将是:

    A   B   C   D   E   F
0   2  89  68  48  13  17
1  43   9  98   9  18  94
    meanABC     meanDEF
0   53.0    26.000000
1   50.0    40.333333