AI/Pandas

[Pandas] DataFrame과 Series 간의 연산

sangwonYoon 2023. 3. 9. 00:31

numpy array는 matrix와 vector간의 broadcasting 연산을 지원한다.

 

numpy 배열 간 연산 - broadcasting

 

 

그렇다면, numpy를 기반으로 하는 pandas에서는 DataFrame과 Series 간의 연산을 어떻게 수행할 수 있을까?


df = pd.DataFrame(np.arange(16).reshape(4,4), columns = list("abcd"))

print(df)
# 출력:
#     a   b   c   d
# 0   0   1   2   3
# 1   4   5   6   7
# 2   8   9  10  11
# 3  12  13  14  15

s = pd.Series(np.arange(10, 14))
print(s)
# 출력:
# 0    10
# 1    11
# 2    12
# 3    13
# dtype: int64
print(df + s) # 정상적으로 덧셈이 되지 않음
# 출력:
#     a   b   c   d   0   1   2   3
# 0 NaN NaN NaN NaN NaN NaN NaN NaN
# 1 NaN NaN NaN NaN NaN NaN NaN NaN
# 2 NaN NaN NaN NaN NaN NaN NaN NaN
# 3 NaN NaN NaN NaN NaN NaN NaN NaN

+ 연산자를 사용하면 정상적인 방식으로 덧셈이 수행되지 않는다.

# series가 row broadcasting되어 덧셈 실행
print(df.add(s, axis = 0))
# 출력:
#     a   b   c   d
# 0  10  11  12  13
# 1  15  16  17  18
# 2  20  21  22  23
# 3  25  26  27  28

add 함수를 사용해야 Series가 row broadcasting이 일어나면서 정상적으로 덧셈이 수행된다.

 

print(df * s)
# 출력:
#     a   b   c   d   0   1   2   3
# 0 NaN NaN NaN NaN NaN NaN NaN NaN
# 1 NaN NaN NaN NaN NaN NaN NaN NaN
# 2 NaN NaN NaN NaN NaN NaN NaN NaN
# 3 NaN NaN NaN NaN NaN NaN NaN NaN

print(df.multiply(s, axis = 0))
# 출력: 
#      a    b    c    d
# 0    0   10   20   30
# 1   44   55   66   77
# 2   96  108  120  132
# 3  156  169  182  195

마찬가지로 multiply 함수를 사용하면 정상적으로 곱셈이 수행된다.