2015-12-12 61 views
1

我有一個帶有數據框的面板,索引爲code。例如panel["ABC"]爲我提供了「ABC」的數據幀,它基本上是一個NxM數據矩陣。Python - 爲Pandas面板的每個數據框添加一列

現在,我也有一本字典dict,將每個code映射到一個數字。我想爲每個數據框添加一個新列,其中包含相應的數字(每行重複一次)。

什麼是最好的方式來實現這與熊貓?

回答

1

也許有一個更好的辦法,但我會做到以下幾點:

import pandas as pd 
import numpy as np 

data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 'Item2' : pd.DataFrame(np.random.randn(4, 3))} 

p = pd.Panel(data) 

d = {'Item1':1, 'Item2':2} 

for key, values in d.iteritems(): 

    p[key]['newcol'] = values 

    print p[key] 

這將返回類似:

  0   1   2 newcol 
0 1.348574 -1.141693 0.630736  2 
1 -0.569502 -2.754901 -0.541633  2 
2 -0.365106 0.087317 0.292110  2 
3 -0.481947 0.719049 -0.216578  2 

      0   1   2 newcol 
0 1.622063 1.365436 1.701292  1 
1 -0.050607 -2.451337 -1.053154  1 
2 0.414793 0.295848 -0.206926  1 
3 1.669253 -1.648159 -0.903917  1 

編輯:你可以建立與更新的數據框用新的面板:

newd = {} 

for key, values in d.iteritems(): 

    p[key]['newcol'] = values 

    # Add new keys and dataframe to a new dictionary 
    newd[key] = p[key] 

,然後建立一個新的面板:

p2 = pd.Panel(newd) 
+0

嗨法比奧,謝謝你的回覆。我已經嘗試了你的建議,但問題是新的列在for循環完成後「消失」。 如何讓這些新的柱子留在那裏? – Abramodj

+0

@Abramodj您是否必須將它們再次存儲在面板上? –

+0

是的,我願意。順便說一句,我發現只有當我使用iloc訪問面板時它才「消失」。使用按鍵,按預期工作。爲什麼?! – Abramodj

相關問題