2017-05-02 10 views
0

をループさせずに2つのパネル(3Dアレイ)を乗算する方法を見つけ出すことはできません。Pythonの - 私はこのようなパネルを持っている

values = ['count1','count2','price1','price2'] 
fruit = ['apple','orange'] 
days = ['d1','d2'] 

dictx = {} 

list_count = [] 
list_price = [] 

for v in values: 
    if 'count' in v: 
     dictx[v] = pd.DataFrame(np.random.randint(0,10,size=(len(days), len(fruit))), columns=fruit) 
     list_count.append(v) 
    else: 
     dictx[v] = pd.DataFrame(np.random.rand(len(days), len(fruit)), columns=fruit) 
     list_price.append(v) 
pan = pd.Panel.from_dict(dictx) 

ループなしでは(私は「数」と「価格」の項目1を持っていたふり-100000)、私はこれを達成しようとしています:pan.ix[list_count,:,:] & pan.ix[list_price,:,:]

:私は彼らがこのように使用することと考えていたよう

(pan.ix['count1',:,:] * pan.ix['price1',:,:]) 
    + (pan.ix['count2',:,:] * pan.ix['price2',:,:]) 
    + (pan.ix['countn',:,:] * pan.ix['pricen',:,:]) 

私はlist_countlist_priceを作成しました

だから私は現時点でどのように対処するかを知っているよりももう一つ次元があります。私はこれをスイングできる素晴らしい3D配列やパネル機能があることを願っています。

ありがとうございます!

答えて

2

私はあなたがこれを探しているかもしれない正しく理解していれば:

sum(pan.ix[list_count].values * pan.ix[list_price].values) 

.values属性は、あなたがあなたの要素単位乗算、加算を行うことができますnumpyの配列である、など

>>> pan.ix[list_count].values 
array([[[8, 9], 
     [2, 0]], 

     [[5, 1], 
     [8, 3]]]) 

>>> pan.ix[list_price].values 
array([[[ 0.57644595, 0.52264882], 
     [ 0.82041129, 0.16165434]], 

     [[ 0.08450438, 0.58036628], 
     [ 0.90809822, 0.77834048]]]) 

>>> pan.ix[list_count].values * pan.ix[list_price].values 
array([[[ 4.6115676 , 4.7038394 ], 
     [ 1.64082259, 0.  ]], 

     [[ 0.42252192, 0.58036628], 
     [ 7.26478578, 2.33502144]]]) 

>>> sum(pan.ix[list_count].values * pan.ix[list_price].values) 
array([[ 5.03408952, 5.28420568], 
     [ 8.90560837, 2.33502144]]) 
+0

回答が良いです。ありがとう。何らかの理由で単一の数値出力を生成するようにしています。 – MJS

+0

ちょっとブンジ。私はこれが私に探していた2次元出力を与えると思います... pd.DataFrame((pan.ix [list_count] .values * pan.ix [list_price] .values).sum(axis = 0)) – MJS

+0

@MJS偉大な私はそれがうまくいってうれしい – bunji

関連する問題