2017-02-10 4 views
1

Есть ли простой способ сделать следующее: у меня есть фрейм данных panda со следующими столбцами: дата (по дням), компания, продажи. Я хочу создать dataframe с продажами для каждой компании в качестве столбца; то есть новые столбцы должны быть: дата, продажа компании 1, продажа компании 2, продажа компании 3. Я хотел бы назвать столбцы по имени в столбце компании.Panda dataframe groupby и присоединяется к столбцам

Я сделал: df.groupby(['company']) и думал, что могу использовать внешнее соединение для каждого элемента в группе. Но это кажется неуместным? Кажется, должен быть более простой способ сделать это? Спасибо! Любая помощь приветствуется.

Примером может служить:

date | company | sales 

1/1/2017 | AAA | 100 

1/1/2017 | BBB | 200 

1/1/2017 | CCC | 300 

И я хочу, чтобы преобразовать его в:

date | AAA | BBB | CCC 

1/1/2017 | 100 | 200 | 300 
+0

Пожалуйста, ваши фактический код; однако, похоже, что вы можете выполнить эту задачу с помощью 'pivot_table', например:' df.pivot_table (index = 'date', columns = 'company', values ​​= 'sales', aggfunc = 'sum') '. – cmaher

ответ

1

вариант 1
set_index + unstack

df.set_index(['date', 'company']).sales.unstack().reset_index() 

company  date AAA BBB CCC 
0  1/1/2017 100 200 300 

вариант 2
pivot

df.pivot('date', 'company', 'sales').reset_index() 

company  date AAA BBB CCC 
0  1/1/2017 100 200 300 
+0

Спасибо. Я попытался удалить столбец компании из вашего сводного результата (поскольку он мне не нужен). Я не мог сделать это с помощью 'drop ('company', axis = 1)'. Как мне избавиться от столбца компании? –

+0

@StanfordWong 0 - индекс. Компания - это имя объекта столбцов. Вы не можете избавиться от индекса. Но вы можете избавиться от имени столбцов. Добавьте следующее в любое решение: .rename_axis ([None], 1) – piRSquared

+0

Могу ли я спросить, почему вы добавляете 'reset_index()' в конце? Кажется, что это нормально? –

Смежные вопросы