在N个父列标题Pandas下包含相同的列标题子集

时间:2018-07-02 07:12:57

标签: python-3.x pandas

我试图将尺寸为52x40的2d数组制作为52x40的数据帧,但只有10个列标题。在下面的示例中,假设一个尺寸为52x30的数据帧具有10列标题,每个标题包含3列。

我一直在尝试看pandas文档以及其他类似的问题修复程序,这些修复程序虽然不尽相同,但仍然尝试过并且失败了。

任何人都知道如何执行此操作吗? 现在,我能做的最接近的实现是接收一个52x40的熊猫数据帧,但列标题是同一天的4次,然后第二天重复4次,然后下一个重复……直到完成10天。 即:总共40列。

final_logic_table = pd.DataFrame(final_logic_table, index=[nurseData.importShift.columns], columns=[dates]);
        final_logic_table.set_index(numpy.unique(dates));
        final_logic_table.sort_index(inplace=True);

这就是我要实现的目标:

sample] 1

1 个答案:

答案 0 :(得分:1)

我认为需要MultiIndex创建的MultiIndex.from_product

np.random.seed(1256)

dates = pd.date_range('2018-01-12', periods=10)
c= pd.MultiIndex.from_product([dates, ['Morning','Afternoon','Night']])
df = pd.DataFrame(np.random.randint(10, size=(52,30)), columns=c)
print (df.head())

  2018-01-12                 2018-01-13                 2018-01-14            \
     Morning Afternoon Night    Morning Afternoon Night    Morning Afternoon   
0          1         5     8          8         9     3          6         3   
1          0         7     2          8         2     4          8         3   
2          6         9     4          2         8     7          1         6   
3          1         8     9          1         6     3          4         9   
4          7         8     7          0         6     3          0         2   

        2018-01-15  ...  2018-01-18 2018-01-19                 2018-01-20  \
  Night    Morning  ...       Night    Morning Afternoon Night    Morning   
0     0          6  ...           4          9         4     6          1   
1     5          5  ...           2          4         7     4          0   
2     3          2  ...           3          2         4     1          5   
3     1          3  ...           0          2         1     3          7   
4     0          7  ...           8          2         1     5          0   

                  2018-01-21                  
  Afternoon Night    Morning Afternoon Night  
0         7     7          5         8     3  
1         4     9          6         0     4  
2         4     9          5         2     4  
3         4     8          1         0     2  
4         3     9          1         7     1  

[5 rows x 30 columns]