2016-04-22 127 views
1

我的最終目標是在(2,2)多索引數據框內爲兩行計算pct_change,但我希望pct_change行出現在其他兩行的下方。我知道pct_change()方法,但不會創建一個新行,所以我將pct_change作爲單獨的數據框計算,並將pct_change行附加到現有數據框。這是一個示例數據框。Python Pandas多重索引:重命名特定索引行值

df = pd.DataFrame(data={ 
    'A': [94128, 28198, -70.04], 'B': [3627, 1483, -59.11]}, 
        index=pd.MultiIndex.from_tuples([('Label', '(Jun 1, 2014-Mar 31, 2015)'), 
                ('Label', '(Jun 1, 2015-Mar 31, 2016)'), 
                ('Label', '(Jun 1, 2015-Mar 31, 2016)')], 
                names=['Text', 'Period'])) 

是這樣的:

          A  B 
Text Period          
Label (Jun 1, 2014-Mar 31, 2015) 94128.00 3627.00 
     (Jun 1, 2015-Mar 31, 2016) 28198.00 1483.00 
     (Jun 1, 2015-Mar 31, 2016) -70.04 -59.11 

這是一個多指標,我要重命名的最後Period行值說% Change

所需的輸出:

          A  B 
Text Period          
Label (Jun 1, 2014-Mar 31, 2015) 94128.00 3627.00 
     (Jun 1, 2015-Mar 31, 2016) 28198.00 1483.00 
         % Change -70.04 -59.11 

是什麼,我想給它多指標的複雜性做甚至可能嗎?

>>> df.index 
MultiIndex(levels=[['Label'], ['(Jun 1, 2014-Mar 31, 2015)', '(Jun 1, 2015-Mar 31, 2016)']], 
      labels=[[0, 0, 0], [0, 1, 1]], 
      names=['Text', 'Period']) 

回答

1

我覺得你首先get_level_valuesPeriod水平tolist可以通過索引[:-1]刪除最後一個值,並添加新的列表['% Change']。最後創建新MultiIndexfrom_tuples

print df.index.get_level_values('Period')[:-1].tolist() + ['% Change'] 
['(Jun 1, 2014-Mar 31, 2015)', '(Jun 1, 2015-Mar 31, 2016)', '% Change'] 

#change multiindex 
new_index = zip(df.index.get_level_values('Text'), 
       df.index.get_level_values('Period')[:-1].tolist() + ['% Change']) 

df.index = pd.MultiIndex.from_tuples(new_index, names = df.index.names) 
print df 
             A  B 
Text Period          
Label (Jun 1, 2014-Mar 31, 2015) 94128.00 3627.00 
     (Jun 1, 2015-Mar 31, 2016) 28198.00 1483.00 
     % Change      -70.04 -59.11 

print df.index 
MultiIndex(levels=[[u'Label'], 
      [u'% Change', u'(Jun 1, 2014-Mar 31, 2015)', u'(Jun 1, 2015-Mar 31, 2016)']], 
      labels=[[0, 0, 0], [1, 2, 0]], 
      names=[u'Text', u'Period']) 
+0

太棒了!我必須使用'list(zip(...))'python 3),但是你的方法很有意義。所以外賣就是創建一個包含'%Change'值的全新索引,然後用'new_index'換出當前的多索引。 – Jarad