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)
a    NaN
b    3.0
c    5.0
d    NaN
dtype: float64

比較演算

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

加減乗除、累乗、mod

内積、行列積、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
    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|$
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
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
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
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

コメント

コメントする

目次