Pandas groupby和set_索引后如何计算特殊列值的平均值
我的意见如下:Pandas groupby和set_索引后如何计算特殊列值的平均值,pandas,group-by,Pandas,Group By,我的意见如下: CV Alg Month Result 0 CV_1 RND JAN 66.6 1 CV_1 XGB FEB 77.0 2 CV_1 LR MAR 85.5 3 CV_1 DCT APR 53.7 4 CV_1 ADB MAY 78.0 5 CV_1 LASSO JUN 77.7 6 CV_2 RND JAN 44.3 7
CV Alg Month Result
0 CV_1 RND JAN 66.6
1 CV_1 XGB FEB 77.0
2 CV_1 LR MAR 85.5
3 CV_1 DCT APR 53.7
4 CV_1 ADB MAY 78.0
5 CV_1 LASSO JUN 77.7
6 CV_2 RND JAN 44.3
7 CV_2 XGB FEB 77.9
8 CV_2 LR MAR 85.9
9 CV_2 DCT APR 88.0
10 CV_2 ADB MAY 66.8
11 CV_2 LASSO JUN 77.3
{'CV': {0: 'CV_1', 1: 'CV_1', 2: 'CV_1', 3: 'CV_1', 4: 'CV_1', 5: 'CV_1', 6: 'CV_2', 7: 'CV_2', 8: 'CV_2', 9: 'CV_2', 10: 'CV_2', 11: 'CV_2'}, 'Alg': {0: 'RND', 1: 'XGB', 2: 'LR', 3: 'DCT', 4: 'ADB', 5: 'LASSO', 6: 'RND', 7: 'XGB', 8: 'LR', 9: 'DCT', 10: 'ADB', 11: 'LASSO'}, 'Month': {0: 'JAN', 1: 'FEB', 2: 'MAR', 3: 'APR', 4: 'MAY', 5: 'JUN', 6: 'JAN', 7: 'FEB', 8: 'MAR', 9: 'APR', 10: 'MAY', 11: 'JUN'}, 'Result': {0: 66.6, 1: 77.0, 2: 85.5, 3: 53.7, 4: 78.0, 5: 77.7, 6: 44.3, 7: 77.9, 8: 85.9, 9: 88.0, 10: 66.8, 11: 77.3}}
我正在尝试使用以下格式创建最终结果数据帧:
RND XGB LR DCT ADB LASSO
JAN NaN NaN NaN NaN NaN NaN
FEB NaN NaN NaN NaN NaN NaN
MAR NaN NaN NaN NaN NaN NaN
APR NaN NaN NaN NaN NaN NaN
MAY NaN NaN NaN NaN NaN NaN
JUN NaN NaN NaN NaN NaN NaN
NaN值应该是CV_1、CV_2…的结果列的平均值。。。每个月和每个算法的CV_n
我已经使用set_索引几个月了,而groupby用于Alg列,但无法做到这一点。如何做到这一点?使用但要正确排序,请使用有序分类:
cats = ['JAN','FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
df['Month'] = pd.Categorical(df['Month'], ordered=True, categories=cats)
df['Alg'] = pd.Categorical(df['Alg'], ordered=True, categories=df['Alg'].drop_duplicates())
df = df.pivot_table(index='Month', columns='Alg', values='Result', aggfunc='mean')
print (df)
Alg RND XGB LR DCT ADB LASSO
Month
JAN 55.45 NaN NaN NaN NaN NaN
FEB NaN 77.45 NaN NaN NaN NaN
MAR NaN NaN 85.7 NaN NaN NaN
APR NaN NaN NaN 70.85 NaN NaN
MAY NaN NaN NaN NaN 72.4 NaN
JUN NaN NaN NaN NaN NaN 77.5
或索引中存在以下值:
这正是我想做的。非常感谢。
cats = ['JAN','FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
df = (df.pivot_table(index='Month', columns='Alg', values='Result', aggfunc='mean')
.reindex(index=pd.Index(cats).intersection(df['Month'].unique()),
columns= df['Alg'].drop_duplicates()))
print (df)
Alg RND XGB LR DCT ADB LASSO
JAN 55.45 NaN NaN NaN NaN NaN
FEB NaN 77.45 NaN NaN NaN NaN
MAR NaN NaN 85.7 NaN NaN NaN
APR NaN NaN NaN 70.85 NaN NaN
MAY NaN NaN NaN NaN 72.4 NaN
JUN NaN NaN NaN NaN NaN 77.5