创建三维数据框(python)

时间:2019-06-05 12:11:57

标签: python pandas dataframe

我有一个数据框,其中包含一个单元在多年内的各种数据点。此单元号列在数据框的第一列中,名为“单元”。年变量在第二列中。

为了签证,这是我的数据集的迷你版。实际大小是: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

1 个答案:

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