我正在尝试进行一些数据框操作。我该如何获取像
这样的数据框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]}
答案 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