#python #pandas #dataframe #group-by
Вопрос:
У меня есть следующий фрейм данных панд:
df = pd.DataFrame({'Colors': ['blue', 'blue', 'orange', 'red', 'purple', 'orange', 'purple', 'blue', 'brown'], 'Price': ['500', '500', '200', '250', '300', '765', '1100', '762', '650', '625'], 'Style': ['farm', 'contemporary', 'modern', 'MDM', 'MDM', 'contemporary', 'farm', 'contemporary', 'farm'], 'Location': ['far', 'near', 'far', 'far', 'near', 'far', 'far', 'near', 'far']})
Я могу сделать df.groupby(['Colors', 'Price', 'Style', 'Location']).size()
, чтобы получить разбивку по цвету, чтобы увидеть уникальные комбинации цены, стиля и местоположения, чтобы цвет возвращался в виде серии.
Вопрос — как я могу использовать это для создания нового фрейма данных pandas, где каждый столбец соответствует цвету (синий, Оранжевый, Красный и т.д.) и уникальным комбинациям значений (500_contemporary_near, 500_farm_far и т.д.)?
Примером вывода, который я пытаюсь сгенерировать, является фрейм данных, в котором есть столбец под названием «Синий», и каждое значение под (каждой строкой) — это строки, такие как 500_contemporary_near.
Синий
500_contemporary_near
500_farm_far
Ответ №1:
Вы можете сделать unstack
df.groupby(['Colors', 'Price', 'Style', 'Location']).size().unstack(level=0)
Комментарии:
1. Я пытался это сделать, но это не совсем то, что я собираюсь сделать. Я хотел бы создать новый фрейм данных, в котором для данного цвета есть столбец для цвета (т. Е. Синий), а каждая строка внизу представляет собой уникальную строку его функций (500_contemporary_near). Таким образом, в конечном итоге столбцы являются цветами, а строки соответствуют уникальным строковым функциям для данного цвета.
2. @MAsoccer9 присоединяется ли строка, а затем группируется ~
3. Не могли бы вы привести наглядный пример?
Ответ №2:
Как насчет этого:
pd.DataFrame([{k[0]: '_'.join(k[1:])} for k in df.groupby(['Colors','Price', 'Style', 'Location']).groups]).fillna('') blue brown orange purple red 0 500_contemporary_near 1 500_farm_far 2 762_contemporary_near 3 650_farm_far 4 200_modern_far 5 765_contemporary_far 6 1100_farm_far 7 300_MDM_near 8 250_MDM_far
Комментарии:
1. Это ближе к тому, чего я пытаюсь достичь. При такой реализации 500_contemporary_near, 500_farm_far и 762_contemporary_near находятся в одном столбце «Синий», а 650_farm_far находится в столбце «Коричневый» и так далее? Это правда?
2. Да, это верно