Как рассчитать среднее значение столбца spesifi c после groupby и set_index - PullRequest
1 голос
/ 22 января 2020

У меня есть df, как показано ниже:

      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 должны быть средними значения столбца Result CV_1, CV_2 ... CV_n для каждого месяца и каждого алгоритма.

Я использовал set_index для месяцев и groupby для столбца Alg, но не смог этого сделать. Как я могу это сделать?

1 Ответ

1 голос
/ 22 января 2020

Используйте DataFrame.pivot_table, но для правильного заказа используйте упорядоченные категории:

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

Или DataFrame.reindex значения существуют в индексе с Index.intersection:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...