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