我有一个csv文件,其布局如下:年,种族,性别,年龄和人口。每年都有几个不同的群体。
我从CSV
创建了以下DataframeCSV_df = pd.read_csv('Data/Demographics/Demo/akwbo19ages.csv')
df = CSV_df[CSV_df["age"] >= 4].groupby(["year","race","sex","age"])['pop'].sum()
导致
year race sex age
1969 1 1 1 10574
2 20245
...
n 11715
2 1 8924
2 9919
...
n 9960
...
2012 3 1 1 7861
2 8242
...
n 7268
2 1 7245
2 7821
...
n 6912
但是,我想要的是每行代表一年,并且有几列代表每个组(即每个可能的种族,性别和年龄组合的人口数字列)
year group1 group2 ... groupN
1969 10574 20245 9960
...
2012 7861 8242 6912
答案 0 :(得分:2)
IIUC需要unstack
reset_index
,然后按list
理解重命名列names
:
print s
year race sex age
1969 1 1 1 10574
2 20245
2 1 8924
2 9919
2012 3 1 1 7861
2 8242
2 1 7245
2 7821
Name: a, dtype: int64
df = s.unstack().reset_index(drop=True, level=[1,2]).rename_axis(None)
df.columns = ['group' + str(col) for col in df.columns]
print df
group1 group2
1969 10574 20245
1969 8924 9919
2012 7861 8242
2012 7245 7821
或者如果您需要index name
删除rename_axis:
df = s.unstack().reset_index(drop=True, level=[1,2])
df.columns = ['group' + str(col) for col in df.columns]
print df
group1 group2
year
1969 10574 20245
1969 8924 9919
2012 7861 8242
2012 7245 7821