基于数据框
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
?
答案 0 :(得分:2)
首先创建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
答案 1 :(得分:2)
尝试以下方法,希望对您有所帮助:
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
现在执行以下步骤:
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)
输出将会是:
meanABC meanDEF
0 53.0 26.000000
1 50.0 40.333333