본문 바로가기
파이썬

파이썬 Pandas : 두 데이터 프레임의 요소 별 곱셈

by º기록 2020. 12. 26.
반응형

두 Pandas 데이터 프레임간에 요소 별 곱셈을 수행하는 방법을 알고 있습니다. 그러나 두 데이터 프레임의 차원이 호환되지 않으면 상황이 더 복잡해집니다. 예를 들어 df * df2 아래는 간단하지만 df * df3 가 문제입니다.

df = pd.DataFrame({'col1' : [1.0] * 5, 
                   'col2' : [2.0] * 5, 
                   'col3' : [3.0] * 5 }, index = range(1,6),)
df2 = pd.DataFrame({'col1' : [10.0] * 5, 
                    'col2' : [100.0] * 5, 
                    'col3' : [1000.0] * 5 }, index = range(1,6),)
df3 = pd.DataFrame({'col1' : [0.1] * 5}, index = range(1,6),)

df.mul(df2, 1) # element by element multiplication no problems

df.mul(df3, 1) # df(row*col) is not equal to df3(row*col)
   col1  col2  col3
1   0.1   NaN   NaN
2   0.1   NaN   NaN
3   0.1   NaN   NaN
4   0.1   NaN   NaN
5   0.1   NaN   NaN

위의 상황에서 df의 모든 열에 df3.col1을 어떻게 곱할 수 있습니까 ?

내 시도 : 동일한 차원의 데이터 프레임을 얻기 위해 df3.col1 len (df.columns.values) 번 복제하려고했습니다. df 로 :

df3 = pd.DataFrame([df3.col1 for n in range(len(df.columns.values)) ])
df3
        1    2    3    4    5
col1  0.1  0.1  0.1  0.1  0.1
col1  0.1  0.1  0.1  0.1  0.1
col1  0.1  0.1  0.1  0.1  0.1

그러나 이것은 차원 3 * 5의 데이터 프레임을 생성하지만 5 * 3 이후입니다. 필요한 것을 얻기 위해 df3.T () 로 전치 할 수 있다는 것을 알고 있지만 이것이 가장 빠른 방법은 아니라고 생각합니다.

 

해결 방법

 

In [161]: pd.DataFrame(df.values*df2.values, columns=df.columns, index=df.index)
Out[161]: 
   col1  col2  col3
1    10   200  3000
2    10   200  3000
3    10   200  3000
4    10   200  3000
5    10   200  3000

 

참조 페이지 https://stackoverflow.com/questions/21022865

 

 

반응형

댓글