熊猫操纵多个数据框

时间:2019-07-10 13:13:08

标签: python pandas

我正在尝试进行一些数据框操作。我该如何获取像

这样的数据框
2018 data

Age   City1    City2
0         5        10
1         6        11
2         8        21


2019 data

Age   City1    City2
0         15        20
1         63        21
2         83        41

并制作单独的数据框,例如

Age 0 
       2018    2019
City1     5      15
City2    10      20 

Age 1 
       2018    2019
City1     6      63
City2    11      21 

Age 2 
       2018    2019
City1     8      83
City2    21      41 

制作数据框

df1 = {'Age': [0,1,2], 'City1': [5,6,8], 'City2': [10,11,22]}

df2 = {'Age': [0,1,2], 'City1': [15,63,83], 'City2': [10,11,41]}

2 个答案:

答案 0 :(得分:1)

使用带有参数keys的{​​{3}}来获取有关年份的信息,并以concat重塑:

df1 = pd.DataFrame(df1)
df2 = pd.DataFrame(df2)

df = pd.concat([df1.set_index('Age'), df2.set_index('Age')], keys=(2018, 2019), axis=1).stack()
print (df)
         2018  2019

0 City1     5    15
  City2    10    10
1 City1     6    63
  City2    11    11
2 City1     8    83
  City2    22    41

如果需要,请从DataFrame中选择每个MultiIndex

print (df.loc[0])
print (df.xs(0))
       2018  2019
City1     5    15
City2    10    10

print (df.loc[1])
print (df.xs(1))

       2018  2019
City1     6    63
City2    11    11

如果需要创建DataFrame对象通过groupby循环的字典:

d = {k: v.reset_index(level=0, drop=True) for k, v in df.groupby(level=0)}
print (d)
{0:        2018  2019
City1     5    15
City2    10    10, 1:        2018  2019
City1     6    63
City2    11    11, 2:        2018  2019
City1     8    83
City2    22    41}

答案 1 :(得分:0)

您可以将Age设置为索引并使用pd.DataFrame

df_dicts = {2018:df1, 2019:df2}

df = pd.DataFrame({k:v.set_index('Age').stack() for k,v in df_dicts.items()})

为您提供了双索引数据框:

           2018  2019
Age                  
0   City1     5    15
    City2    10    10
1   City1     6    63
    City2    11    11
2   City1     8    83
    City2    22    41

例如,您可以访问每个Age的数据df.loc[0],它给出:

    2018    2019
City1   5   15
City2   10  10