반응형
두 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
반응형
'파이썬' 카테고리의 다른 글
파이썬 (Python) 목록 색인이 범위를 벗어남-반복 (0) | 2020.12.26 |
---|---|
파이썬 How to get text with selenium web driver in python (0) | 2020.12.26 |
파이썬 NumPy에서 배열을 정규화하는 방법은 무엇입니까? (0) | 2020.12.26 |
파이썬 Python Pandas 히스토그램 로그 스케일 (0) | 2020.12.26 |
파이썬 텍스트 파일 (.py)을 IPython 노트북 셀에로드 / 편집 / 실행 / 저장하는 방법은 무엇입니까? (0) | 2020.12.26 |
댓글