我有一个数据框,其中包含一个单元在多年内的各种数据点。此单元号列在数据框的第一列中,名为“单元”。年变量在第二列中。
为了签证,这是我的数据集的迷你版。实际大小是:55列乘700000行。
import random
col3=[random.randrange(1,101,1) for _ in range (14)]
col4=[random.randrange(1,101,1) for _ in range (14)]
d = {'Unit': [1, 1, 1, 1, 2, 2, 2, 3, 4, 5, 6, 6, 6, 6],
'Year': [2014, 2015, 2016, 2017, 2015, 2016, 2017, 2017, 2014, 2015, 2014, 2015, 2016, 2017], 'col3' : col3, 'col4' : col4 }
df = pd.DataFrame(data=d)
使用此数据集,我想查看一年内和几年之间col3和col4之间的比率。因此,我想制作一个三维数据框,该框将年份放置在另一个轴上,而不是在2D框架中作为变量。
有人有关于如何执行此操作的提示吗?这是一个好方法吗?建议?
Jen
答案 0 :(得分:3)
由于Panel
已被弃用,这里是MultiIndex
的替代选择:
df1 = df.set_index(['Unit','Year']).unstack()
print (df1)
col3 col4
Year 2014 2015 2016 2017 2014 2015 2016 2017
Unit
1 58.0 80.0 37.0 79.0 12.0 32.0 22.0 39.0
2 NaN 90.0 46.0 98.0 NaN 73.0 95.0 28.0
3 NaN NaN NaN 52.0 NaN NaN NaN 90.0
4 90.0 NaN NaN NaN 92.0 NaN NaN NaN
5 NaN 9.0 NaN NaN NaN 3.0 NaN NaN
6 33.0 22.0 41.0 40.0 21.0 5.0 69.0 10.0
df2 = df.set_index(['Year','Unit']).unstack()
print (df2)
col3 col4
Unit 1 2 3 4 5 6 1 2 3 4 5 6
Year
2014 58.0 NaN NaN 90.0 NaN 33.0 12.0 NaN NaN 92.0 NaN 21.0
2015 80.0 90.0 NaN NaN 9.0 22.0 32.0 73.0 NaN NaN 3.0 5.0
2016 37.0 46.0 NaN NaN NaN 41.0 22.0 95.0 NaN NaN NaN 69.0
2017 79.0 98.0 52.0 NaN NaN 40.0 39.0 28.0 90.0 NaN NaN 10.0
另一种方法是使用xarray
。