Есть ли способ разгруппировать группу по данным - PullRequest
0 голосов
/ 15 марта 2019

Я хотел бы разгруппировать фрейм данных после применения группировки по условию.Я использовал pandas group by & sum для группировки по.Ниже приведена группировка по таблице

+------------+--------------+----------------+-----------------+
|   Month    | Amt_8_red_17 | Amt_8_black_29 | Amt_10_black_29 |
+------------+--------------+----------------+-----------------+
| 01-01-2018 |            0 |             12 |              18 |
| 01-02-2018 |          100 |             12 |              12 |
+------------+--------------+----------------+-----------------+

Теперь я хочу разгруппировать данные.Имена столбцов представляют собой комбинацию столбцов, соединенных подчеркиванием.Например: Amt_8_red_17: имена столбцов (сумма, количество, цвет, идентификатор). Вывод выглядит как

+------------+---------+-------+-------+----+
|   Month    | Amount  | Count | Color | Id |
+------------+---------+-------+-------+----+
| 01-01-2018 |       0 |     8 | red   | 17 |
| 01-01-2018 |      12 |     8 | black | 29 |
| 01-01-2018 |      18 |    10 | black | 29 |
| 01-02-2018 |     100 |     8 | red   | 17 |
| 01-02-2018 |      12 |     8 | black | 29 |
| 01-02-2018 |      12 |    10 | black | 29 |
+------------+---------+-------+-------+----+

Есть ли более быстрый способ?

1 Ответ

3 голосов
/ 15 марта 2019

Сначала создайте индекс по всем столбцам без _ на DataFrame.set_index, если необходимо.

Затем создайте MultiIndex на str.split и измените форму наDataFrame.unstack.

Последняя очистка данных - удалить первый уровень первым DataFrame.reset_index, второй - для столбцов с MultiIndex.Последний набор новых имен столбцов.

df = df.set_index('Month')
df.columns = df.columns.str.split('_', expand=True)
df = df.unstack().reset_index(level=0, drop=True).reset_index()
df.columns= ['Count','Color','Id','Month','Amount']
print (df)
  Count  Color  Id       Month  Amount
0     8    red  17  01-01-2018       0
1     8    red  17  01-02-2018     100
2     8  black  29  01-01-2018      12
3     8  black  29  01-02-2018      12
4    10  black  29  01-01-2018      18
5    10  black  29  01-02-2018      12

Последний при необходимости изменить порядок столбцов:

df = df[['Month','Amount','Count','Color','Id']]
print (df)
        Month  Amount Count  Color  Id
0  01-01-2018       0     8    red  17
1  01-02-2018     100     8    red  17
2  01-01-2018      12     8  black  29
3  01-02-2018      12     8  black  29
4  01-01-2018      18    10  black  29
5  01-02-2018      12    10  black  29
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...