pandas – 二項演算、単項演算まとめ

概要

pandas の基本的な関数を整理しました。

二項演算

二項演算は同じインデックス同士で行われる

pandas で2つの DataFrame または Series 同士で演算を行う場合、演算は同じ index 同士で行われます。index が一方にしかない場合は、NaN として演算が行われます。

例えば、以下は index “a” は s1、”d” は s2 にしか存在しないので、インデックス “a” は 1 + NaN、インデックス “d” は NaN + 3 として計算されます。その結果、インデックス “a” 及び “d” の演算結果は NaN になります。

In [1]:
import pandas as pd

s1 = pd.Series([1, 2, 3], index=["a", "b", "c"])
s2 = pd.Series([1, 2, 3], index=["b", "c", "d"])

s3 = s1 + s2
print(s3)
Python
a    NaN
b    3.0
c    5.0
d    NaN
dtype: float64

比較演算

DataFrame Series numpy 説明
DataFrame.lt Series.lt less x1<x2x_1 < x_2
DataFrame.le Series.le less_equal x1x2x_1 \le x_2
DataFrame.gt Series.gt greater x1>x2x_1 > x_2
DataFrame.ge Series.ge greater_equal x1x2x_1 \ge x_2
DataFrame.eq Series.eq equal x1=x2x_1 = x_2
DataFrame.ne Series.ne not_equal x1x2x_1 \ne x_2

加減乗除、累乗、mod

DataFrame Series numpy 説明
DataFrame.add Series.add add x1+x2x_1 + x_2
DataFrame.sub Series.sub subtract x1x2x_1 – x_2
DataFrame.mul Series.mul multiply x1×x2x_1 \times x_2
DataFrame.div Series.div divide x1/x2x_1 / x_2
DataFrame.truediv Series.truediv true_divide x1/x2x_1 / x_2
DataFrame.floordiv Series.floordiv floor_divide x1//x2x_1 // x_2
DataFrame.pow Series.pow power x1x2x_1^{x_2}
DataFrame.mod Series.mod mod x1mod  x2x_1 \mod x_2
DataFrame.radd Series.radd x2+x1x_2 + x_1
DataFrame.rsub Series.rsub x2x1x_2 – x_1
DataFrame.rmul Series.rmul x2×x1x_2 \times x_1
DataFrame.rdiv Series.rdiv x2/x1x_2 / x_1
DataFrame.rtruediv Series.rtruediv x2/x1x_2 / x_1
DataFrame.rfloordiv Series.rfloordiv x2//x1x_2 // x_1
DataFrame.rmod Series.rmod x2mod  x1x_2 \mod x_1
DataFrame.rpow Series.rpow x2x1x_2^{x_1}

内積、行列積、any、all、equals

DataFrame Series numpy 説明
DataFrame.dot Series.dot dot DataFrame: 行列積
Series: 内積
DataFrame.any Series.any any いずれかの要素が True かどうか
DataFrame.all Series.all all すべての要素が True かどうか
DataFrame.equals Series.equals array_equal すべての要素が一致するかどうか

Series.dot、DataFrame.dot

DataFrame.dot は行列積を計算します。 Series.dot は内積を計算します。

In [2]:
import pandas as pd

df1 = pd.DataFrame([[6, 4], [5, 4]])
df2 = pd.DataFrame([[7, 5], [1, 6]])

ret = df1.dot(df2)
print(ret)
#     0   1
# 0  46  54
# 1  39  49

# 以下と同値
ret = df1 @ df2
print(ret)
#     0   1
# 0  46  54
# 1  39  49
Python
    0   1
0  46  54
1  39  49
    0   1
0  46  54
1  39  49

単項演算

絶対値、内積、行列積、丸め、クリップ

DataFrame Series numpy 説明
DataFrame.abs Series.abs abs x|x|
DataFrame.round Series.round around 指定した桁に丸める
DataFrame.clip Series.clip clip 指定範囲に値をクリップする

Series.abs、DataFrame.abs

In [3]:
import pandas as pd

s = pd.Series([1, -2, -3])
ret = s.abs()
print(ret)
# 0    1
# 1    2
# 2    3
# dtype: int64

df = pd.DataFrame([[1, -2], [3, -4]])
ret = df.abs()
print(ret)
#    0  1
# 0  1  2
# 1  3  4
Python
0    1
1    2
2    3
dtype: int64
   0  1
0  1  2
1  3  4

Series.round、DataFrame.round

小数を指定した桁に丸めます。

In [4]:
import pandas as pd

s = pd.Series([1.123, -2.125, -3.127])
ret = s.round(2)
print(ret)
# 0    1.12
# 1   -2.12
# 2   -3.13
# dtype: float64

df = pd.DataFrame([[1.123, -2.125], [3.127, -4.129]])
ret = df.round(2)
print(ret)
#       0     1
# 0  1.12 -2.12
# 1  3.13 -4.13
Python
0    1.12
1   -2.12
2   -3.13
dtype: float64
      0     1
0  1.12 -2.12
1  3.13 -4.13

Series.clip、DataFrame.clip

指定した範囲に値をクリップします。

In [5]:
import pandas as pd

s = pd.Series([0, 1, 2, 3, 4, 5])
ret = s.clip(1, 3)
print(ret)
# 0    1
# 1    1
# 2    2
# 3    3
# 4    3
# 5    3
# dtype: int64

df = pd.DataFrame([[0, 1, 2], [3, 4, 5]])
ret = df.clip(1, 3)
print(ret)
#    0  1  2
# 0  1  1  2
# 1  3  3  3
Python
0    1
1    1
2    2
3    3
4    3
5    3
dtype: int64
   0  1  2
0  1  1  2
1  3  3  3

コメント

コメントする