Pandas 将一列重塑为多列

Pandas 将一列重塑为多列,pandas,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 这看起来像是您希望透视表。熊猫很好 import pandas as pd df = pd.DataFrame([[1945, 1, 2

我正在使用的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

这看起来像是您希望透视表。熊猫很好

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

如果您的
['Year','Age']
组合是唯一的,您只需要
设置索引
取消堆栈

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\u表
pivot
类似于
set\u索引
groupby

这意味着,
pivot\u表
处理聚合

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,年份=1945列中出现什么?显示了两个不同的值。如果这是一个打字错误,我的答案应该是正确的