длинный к широкому формату pandas с несколькими группами - PullRequest
0 голосов
/ 07 марта 2020

У меня есть набор данных, который похож в этом формате:

CITY - YEAR - ATTRIBUTE - VALUE
## example:

dallas-2002-crime-100
dallas-2003-crime-101
dallas-2002-population-4000
houston-2002-population-4100
etc....

Я пытаюсь преобразовать этот длинный в широкий формат, чтобы каждое значение город + год представляло собой строку и все различные комбинации атрибутов являются именами столбцов.

Таким образом, этот новый кадр данных будет выглядеть следующим образом:

###
city - year - population - crime - median_income- etc....

Я посмотрел на функцию pivot , но, похоже, он не поддерживает мультииндекс для изменения формы. Может кто-нибудь дать мне знать, как обойти транспозицию? Кроме того, я попытался взглянуть на pd.pivot_table, но, похоже, это обычно работает только с числовыми данными с суммами, значит, и так далее c. Большинство моих атрибутов VALUE на самом деле являются строками, поэтому я не могу их использовать.

### doesn't work - can't use a multindex 
df.pivot(index=['city','year'], columns = 'attribute', values='value') 

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 07 марта 2020

Это то, что вы ищете:

import pandas as pd
from io import StringIO

data = """city-year-attribute-value
dallas-2002-crime-100
dallas-2003-crime-101
dallas-2002-population-4000
houston-2002-population-4100"""

df = pd.read_csv(StringIO(data), sep="-")

pivoted = df.pivot_table(
    index=["city", "year"],
    columns=["attribute"],
    values=["value"]
)
print(pivoted.reset_index())

Результат:

              city  year  value           
attribute                 crime population
0           dallas  2002  100.0     4000.0
1           dallas  2003  101.0        NaN
2          houston  2002    NaN     4100.0
...