2013-07-30 236 views
2

我需要創建一個DataFrame,其中包含DataFrames的列。列中的DataFrames有不同的大小,我得到一個StopIteration異常。這不會發生,當DataFrames是相同的大小。我知道Panel更適合這種情況,但在這種情況下我需要一個DataFrame熊貓:DataFrame中的DataFrame

a=pd.DataFrame({'cat1':['one','two','three'],'cat2':['four','five','six']}) 
b=pd.DataFrame({'cat1':['ten','eleven'],'cat2':['twelve','thirteen']}) 
pd.DataFrame({'col1':{'row1':a,'row2':b}}) 

如果我分別從'cat1','cat2'中刪除'three'和'six'項,那麼這個工作正常。任何想法如何我可以實現這一目標?

+0

我想我還沒有看到數據框的在大熊貓作家的「Python數據分析」一書的數據幀一提。你最終的目標是什麼? –

+0

我有一個證券下跌列表和一堆字段。這些領域的一些結果在表(即持有人名單或股息歷史),我想結合這與標量值(價格,百分比變化,名稱等)。我已經有了一個面板視圖,但希望對整個表格有一個單一的視圖。這只是爲了能夠在代碼中推廣這種方法,也就是說,無論字段形狀如何,我總是可以採用DF.ix ['security','field']。我想唯一正確的方法是用面板[安全] [字段]做到這一點。我只是爲了推廣而努力。 –

回答

1

這不是一個好主意,你會失去所有效率,因爲事情被視爲object dtype,操作將會非常緩慢(因爲操作不能通過c級基本類型完成,如float/int)。更好的是使用多級索引,它可以很容易地包含你想

In [20]: a 
Out[20]: 
    cat1 cat2 
0 one four 
1 two five 
2 three six 

In [21]: b 
Out[21]: 
    cat1  cat2 
0  ten twelve 
1 eleven thirteen 

In [22]: pd.concat([ a, b ], keys={ 'row1' : a, 'row2' : b }) 
Out[22]: 
      cat1  cat2 
row1 0  one  four 
    1  two  five 
    2 three  six 
row2 0  ten twelve 
    1 eleven thirteen 
+0

也可以使用Panel.to_frame(filter_observations = False)創建分層索引的'DataFrame'。 –

+0

謝謝傑夫。這樣做的想法是因爲我需要將這些數據幀與另一些標量值組合在一起。 例如row1:DF_a,np.nan,104,105 | row2:np.nan,DF_b,234,213。 這假設我有列Cat1,Cat2,Scalar1,Scalar2。 我想這仍然可以使用多索引方法,我只需要在cat1/cat2的所有項目上廣播標量值?再次感謝 –

+0

你不需要那麼奇怪''df ['scalar1'] = 234''將會工作 – Jeff