Pandas 使用给定的索引级别和排序顺序堆叠和连接数据帧
我正在尝试将具有相同索引和列的简单数据帧重新塑造并合并为一个更大的数据帧。 例如,我有两个数据集,一个测量t:Pandas 使用给定的索引级别和排序顺序堆叠和连接数据帧,pandas,Pandas,我正在尝试将具有相同索引和列的简单数据帧重新塑造并合并为一个更大的数据帧。 例如,我有两个数据集,一个测量t: In [8]: df1 Out[8]: z a k 2010 t0 t1 t2 2011 t3 t4 t5 2012 t6 t7 t8 2013 t9 t10 t11 和另一个测量p: In [10]: df2 Out[10]: z a k 2010 p0 p1 p2 2011 p
In [8]: df1
Out[8]:
z a k
2010 t0 t1 t2
2011 t3 t4 t5
2012 t6 t7 t8
2013 t9 t10 t11
和另一个测量p:
In [10]: df2
Out[10]:
z a k
2010 p0 p1 p2
2011 p3 p4 p5
2012 p6 p7 p8
2013 p9 p10 p11
我想创建这个数据帧:
...: df3
Out[11]:
t's p's
stats dates
z 2010 NaN NaN
2011 NaN NaN
2012 NaN NaN
2013 NaN NaN
a 2010 NaN NaN
2011 NaN NaN
2012 NaN NaN
2013 NaN NaN
k 2010 NaN NaN
2011 NaN NaN
2012 NaN NaN
2013 NaN NaN
显然是t和p的相应数据。
我尝试了使用.swaplevel()的各种.stack(),然后沿轴1进行连接,但我总是使用.sort_index(),它不保留“zak”的顺序。知道如何有效地执行此操作吗?确实是
stack
和swaplevel
,但您需要一些额外的功能:
(df1.stack().to_frame(name='t\'s')
.join(df2.stack().to_frame(name='p\'s'))
.swaplevel(0,1)
.sort_index()
)
输出:
t's p's
a 2010 t1 p1
2011 t4 p4
2012 t7 p7
2013 t10 p10
k 2010 t2 p2
2011 t5 p5
2012 t8 p8
2013 t11 p11
z 2010 t0 p0
2011 t3 p3
2012 t6 p6
2013 t9 p9
与DataFrame
s一起使用,最后设置索引名的方法是:
df = pd.concat([df1.unstack(),
df2.unstack()], axis=1, keys=('t\'s','p\'s')).rename_axis(['stats','dates'])
print (df)
t's p's
stats dates
z 2010 t0 p0
2011 t3 p3
2012 t6 p6
2013 t9 p9
a 2010 t1 p1
2011 t4 p4
2012 t7 p7
2013 t10 p10
k 2010 t2 p2
2011 t5 p5
2012 t8 p8
2013 t11 p11