我正在使用看起来像这样的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
答案 0 :(得分:3)
如果您的['Year', 'Age']
组合是唯一的,那么您只需要set_index
和unstack
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