使用pandas从csv创建Dataframe

时间:2016-03-31 11:02:55

标签: python csv pandas dataframe

我有一个csv文件,其布局如下:年,种族,性别,年龄和人口。每年都有几个不同的群体。

我从CSV

创建了以下Dataframe
CSV_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

1 个答案:

答案 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