将列重塑为多个列

时间:2017-01-06 21:47:07

标签: pandas

我正在使用看起来像这样的df:

Year Age Income
1945  1   234
1945  1   65
1945  2   234
...
1946  1   34
...
2015  5   34

我想把它变成这样的东西,其中收入值填充df,年龄是指数。

Age 1955 1956 1957 ... 2015
 0   
 1
 2 
 3
...
99

2 个答案:

答案 0 :(得分:3)

如果您的['Year', 'Age']组合是唯一的,那么您只需要set_indexunstack

df.set_index(['Year', 'Age']).Income.unstack('Year')

但他们不是!
因此,您必须决定如何聚合组合组 以下是使用sum

的示例
df.groupby(['Year', 'Age']).Income.sum().unstack('Year', fill_value=0)

Year  1945  1946  2015
Age                   
1      299    34     0
2      234     0     0
5        0     0    34

其他汇总

df.groupby(['Year', 'Age']).Income.first().unstack('Year', fill_value=0)
df.groupby(['Year', 'Age']).Income.last().unstack('Year', fill_value=0)
df.groupby(['Year', 'Age']).Income.mean().unstack('Year', fill_value=0)

<强> pivot_table
pivot_table&lt; - &gt; pivot类似于set_index&lt; - &gt; groupby
含义,pivot_table处理聚合。

df.pivot_table('Income', 'Age', 'Year', 'sum', fill_value=0)
df.pivot_table('Income', 'Age', 'Year', 'first', fill_value=0)
df.pivot_table('Income', 'Age', 'Year', 'last', fill_value=0)
df.pivot_table('Income', 'Age', 'Year', 'mean', fill_value=0)

答案 1 :(得分:0)

这看起来像你想要pivot你的桌子。熊猫documentation非常好。

import pandas as pd
df = pd.DataFrame([[1945, 1, 234],[1946, 1, 65],[1945, 2, 234]])
df.columns = ['year', 'age', 'income']
df.pivot(index='age', columns='year', values='income')

看起来像:

year  1945 1946
age
1     234  65
2     234  None