2017-03-29 4 views
1

私が持っているような単純なパンダのデータフレームこの1:パンダのデータフレームでループネストされた効率的な

d = {'col1': ['a','b','c','d','e'], 'col2': [1,2,3,4,5]} 
df = pd.DataFrame(d) 
df 
    col1 col2 
0 a  1 
1 b  2 
2 c  3 
3 d  4 
4 e  5 

そして、私はそれを反復するために、すべてのための簡単な計算結果(製品のようなまたはそう)を取得する必要があります行の値の組み合わせ

size = df.shape[0] 
mtx = np.zeros(shape=(size, size)) 
mtx 
array([[ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.]]) 

しかし、私は何とか「感覚」は、ネストされたループよりも、これを行うには、より効率的な方法は次のように、そこにある:私はこのように、行列を作り、中に値を入れて考えていた

for index1, c11, c12, in df.itertuples(): 
    for index2, c21, c22 in df.itertuples(): 
     mtx[index1][index2] = float(c12) * float(c22) 

mtx 
array([[ 1., 2., 3., 4., 5.], 
     [ 2., 4., 6., 8., 10.], 
     [ 3., 6., 9., 12., 15.], 
     [ 4., 8., 12., 16., 20.], 
     [ 5., 10., 15., 20., 25.]]) 

どんなアイデアでも大歓迎です!ありがとう! (この例では、*のためですが、あなたは+,-/をしたい場合は、ちょうど最後の行での動作を変更することができます)

import numpy as np 
import pandas as pd 
d = {'col1': ['a','b','c','d','e'], 'col2': [1,2,3,4,5]} 
df = pd.DataFrame(d) 
a=np.array([df.col2.tolist()]) 
a.T*a 

結果は次のとおりです。あなたは次の操作を行うことができます*,+,-,/ようoprationsについては

答えて

3

array([[ 1, 2, 3, 4, 5], 
    [ 2, 4, 6, 8, 10], 
    [ 3, 6, 9, 12, 15], 
    [ 4, 8, 12, 16, 20], 
    [ 5, 10, 15, 20, 25]], dtype=int64) 

ペアごとの違いのためにペアごとの合計のためのa.T+aに変更a.T*a、およびa.T-aへ。ペアワイズ分割が必要な場合は、a.T/aに変更できますが、操作の上に行a=a.astype(float)を含めることを忘れないでください。

関連する問題