如何将平面DataFrame对象转换为具有多个列级别(也按特定维度分组)的DataFrame对象?

2024-09-30 01:19:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将此转换为:

          W         X         Y         Z       tdate tdim  stringdate
0  0.335737 -0.380237 -0.473996 -0.000448  2015-11-20    c  2015-11-20
1 -0.092511  1.149210 -0.834495 -0.585204  2015-05-25    c  2015-05-25
2  1.425946  1.293430 -0.545142  0.287451  2015-12-17    b  2015-12-17
3 -0.199412  1.011220  0.400355  0.470182  2015-03-21    c  2015-03-21
4  2.265234 -0.314174  0.684593 -1.360268  2015-12-23    b  2015-12-23
5 -0.192996  0.150177 -0.684978  0.464223  2015-11-19    b  2015-11-19
6 -1.089473 -1.375843 -0.901250 -0.775122  2015-07-25    c  2015-07-25
7 -0.572807 -2.484145 -2.339342 -0.263439  2015-05-31    a  2015-05-31

对此(使用实际数据而不是零占位符):

date    2015-11-20    2015-05-25    2015-12-17    2015-03-21    2015-12-23     \
metrics          W  X          W  X          W  X          W  X          W  X   
tdim                                                                            
a                0  0          0  0          0  0          0  0          0  0   
b                0  0          0  0          0  0          0  0          0  0   
c                0  0          0  0          0  0          0  0          0  0   

date    2015-11-19    2015-07-25    2015-05-31     
metrics          W  X          W  X          W  X  
tdim                                               
a                0  0          0  0          0  0  
b                0  0          0  0          0  0  
c                0  0          0  0          0  0  

我浏览了Pandas MultiIndexes并自己创建了一个。这就是我如何得到后一个数据帧的原因,但我在文档中没有看到他将现有数据帧重新索引为具有多个列级别的示例。你知道吗

我已经看过这个Pandas: add a column to a multiindex column dataframepandas dataframe select columns in multiindex。这些都是有见地的,但对本案没有特别的帮助。你知道吗

我没有尝试过暴力解决方案(即使用循环手动填充数据)。你知道吗

我使用的是python2.7.10pandas 0.16.1。你知道吗


Tags: 数据文档dataframepandasdate原因column级别
1条回答
网友
1楼 · 发布于 2024-09-30 01:19:25

我假设您希望使用所有['W', 'X', 'Y', 'Z']columns,并且只使用date列中的一列。如果是这样的话,下面的内容应该可以让您达到目的-如果您首先应用set_index,然后unstack,那么pandas会自动创建MultiIndex,然后swap通过levelsort按您的意愿进行swap

df.columns.name = 'metrics'    
df = df.set_index(['tdate', 'tdim']).drop('stringdate', axis=1).unstack('tdate')
df = df.swaplevel(0,1,axis=1).sort_index(axis=1)

     tdate    11/19/15                                11/20/15                      \
metrics         W         X         Y         Z         W         X         Y   
tdim                                                                            
a             NaN       NaN       NaN       NaN       NaN       NaN       NaN   
b       -0.192996  0.150177 -0.684978  0.464223       NaN       NaN       NaN   
c             NaN       NaN       NaN       NaN  0.335737 -0.380237 -0.473996   

tdate             12/17/15             ...       5/25/15            5/31/15  \
metrics        Z         W        X    ...             Y        Z         W   
tdim                                   ...                                    
a            NaN       NaN      NaN    ...           NaN      NaN -0.572807   
b            NaN  1.425946  1.29343    ...           NaN      NaN       NaN   
c        -1/1/04       NaN      NaN    ...     -0.834495  -1/1/04       NaN   

tdate                                    7/25/15                                
metrics         X         Y          Z         W         X        Y          Z  
tdim                                                                            
a       -2.484145 -2.339342  -0.263439       NaN       NaN      NaN        NaN  
b             NaN       NaN        NaN       NaN       NaN      NaN        NaN  
c             NaN       NaN        NaN -1.089473 -1.375843 -0.90125  -0.775122 

相关问题 更多 >

    热门问题