【问题标题】:Convert multi-index indices to columns将多索引索引转换为列
【发布时间】:2014-02-04 12:50:29
【问题描述】:

我定义了一个多索引数据框,例如如:

import pandas as pd
import numpy as np

dates = pd.date_range('20130101',periods=3,freq='5s')
dates = dates.append(dates)

locations = list('AAABBB')
gascode = ['no2','o3','so2']*2

tup = pd.MultiIndex.from_tuples( zip(locations,gascode,dates), names=['Location','gas','Date'] )

data = pd.DataFrame(data=range(6),index=tup,columns=['val1'])

>>> data

Location gas Date                  val1         
A        no2 2013-01-01 00:00:00     0
         o3  2013-01-01 00:00:05     1
         so2 2013-01-01 00:00:10     2
B        no2 2013-01-01 00:00:00     3
         o3  2013-01-01 00:00:05     4
         so2 2013-01-01 00:00:10     5

仅保留来自位置“A”的数据:

data = data.xs(key='A',level='Location')

现在,我想根据 'gas' 索引创建新列以产生:

Date                   no2   o3   so2
2013-01-01 00:00:00     0    nan  nan
2013-01-01 00:00:05     nan  1    nan
2013-01-01 00:00:10     nan  nan  2

我尝试围绕“日期”索引旋转以将“气体”放入列,但失败了。

data = data.pivot(index=data.index.get_level_values(level='date'),
                  columns=situ.index.get_level_values(level='gas'))

我不知道如何实现这一目标;谁能推荐一个替代品?

【问题讨论】:

    标签: python-2.7 pandas pivot multi-index


    【解决方案1】:

    你可以unstack结果:

    In [11]: data.xs(key='A', level='Location').unstack(0)
    Out[11]: 
                         val1         
    gas                   no2  o3  so2
    Date                              
    2013-01-01 00:00:00     0 NaN  NaN
    2013-01-01 00:00:05   NaN   1  NaN
    2013-01-01 00:00:10   NaN NaN    2
    
    [3 rows x 3 columns]
    

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2021-08-28
      • 2021-11-30
      • 2016-09-26
      • 2019-05-04
      • 1970-01-01
      • 2019-04-14
      • 2019-03-03
      • 2021-12-08
      相关资源
      最近更新 更多