Блок данных группируется в один столбец - PullRequest
0 голосов
/ 27 февраля 2020

Я хотел бы знать, как я могу сделать это просто:

У меня есть DataFrame с 4 столбцами, я хочу group by 3 первых столбцов, получить результат 4 на основе 3 других и создайте столбец с ''.join из имени 3 столбцов.

Пример будет проще:

a. |b. |c. |d.<br> name1|name2|name3|result.<br> name4|name5|name6|result2.

I хочу иметь новый фрейм данных, который будет выглядеть так: UPDATE:

|name1-name2-name3|name4-name5-name6|. |result1 |result2 | |result1 |result2 | |result1 |result2 | |result1 |result2 | |result1 |result2 |

NB_CLIENTS - это мой результат, который я группирую по периодичности и стране, и для каждого месяца у меня есть результат.

ПРИМЕР:

MONTH|PERIODICITY|NB_CLIENTS|COUNTRY 2019-05| monthly| 872| NL 2019-02| monthly| 361| IT 2019-02| monthly| 214| NL 2019-05| monthly| 737| IT

станет:

MONTH|monthly-NL. |monthly-IT 2019-05|872. |737 2019-02|214. |361

Я пробовал это:

grouped = test.groupby([name1,name2,name3]).RESULT
tmp = pd.DataFrame()
for name_of_the_group, group in grouped:
    tmp[' '.join(name_of_the_group)] = group

но я получаю все Nan значений, я думаю, что речь идет о копии или что-то, мне нужно reset_index может быть? но где

спасибо

1 Ответ

0 голосов
/ 27 февраля 2020

Я полагаю, вам нужно DataFrame.pivot_table со сглаженными столбцами на f-string s:

df = df.pivot_table(index='MONTH', 
                    columns=['PERIODICITY','COUNTRY'], 
                    values='NB_CLIENTS', 
                    aggfunc='sum')
df.columns = df.columns.map(lambda x: f'{x[0]}-{x[1]}')
df = df.reset_index()
print (df)
     MONTH  monthly-IT  monthly-NL
0  2019-02         361         214
1  2019-05         737         872
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...