2017-03-29 5 views
1

나는이 같은 간단한 팬더 dataframe이 하나팬더 dataframe와 반복 중첩 효율적인

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*aa.T-a한다. 쌍 단위 나누기를 원할 경우 a.T/a으로 변경할 수 있지만 작업 상단에 a=a.astype(float) 줄을 포함해야합니다.