多组熊猫的长到宽格式

时间:2020-03-06 21:27:51

标签: python pandas pivot pivot-table

我有一个与此格式相似的数据集:

CITY - YEAR - ATTRIBUTE - VALUE
## example:

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

我正在尝试将此长格式转换为宽格式,以使每个 city + year 值都是一行,并且 attribute 的所有不同组合都是columns-names

因此,新数据框将如下所示:

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

我已经看过数据透视功能,但是它似乎不支持用于重塑的多索引。有人可以让我知道如何解决移调吗?另外,我试着看 pd.pivot_table,但似乎这通常仅适用于具有和,均值等的数值数据。我的大多数VALUE属性实际上是字符串,因此我似乎无法使用它。

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

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是您要寻找的东西

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