Pandas の DataFrame でよく使う便利な乗算。
間違えやすいので、( ..)φメモメモ
**************************************
import numpy as np
import pandas as pd
1. DataFrame 作成
df1=pd.DataFrame(np.ones(9).reshape(3, 3),
columns=['a','b','c'],
index=[1,2,3])
df1
a | b | c | |
---|---|---|---|
1 | 1.0 | 1.0 | 1.0 |
2 | 1.0 | 1.0 | 1.0 |
3 | 1.0 | 1.0 | 1.0 |
df2=pd.DataFrame(np.arange(9).reshape(3, 3),
columns=['a','b','c'],
index=[1,2,3])
df2
a | b | c | |
---|---|---|---|
1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 |
3 | 6 | 7 | 8 |
2. アダマール積
#アダマール積
df1*df2
a | b | c | |
---|---|---|---|
1 | 0.0 | 1.0 | 2.0 |
2 | 3.0 | 4.0 | 5.0 |
3 | 6.0 | 7.0 | 8.0 |
index, column の名前、型が一致していないとダメ
df2.columns = ['d','e','f']
df1*df2
a | b | c | d | e | f | |
---|---|---|---|---|---|---|
1 | NaN | NaN | NaN | NaN | NaN | NaN |
2 | NaN | NaN | NaN | NaN | NaN | NaN |
3 | NaN | NaN | NaN | NaN | NaN | NaN |
df2.columns = ['a','b','c']
df2.index = [4,5,6]
df1*df2
a | b | c | |
---|---|---|---|
1 | NaN | NaN | NaN |
2 | NaN | NaN | NaN |
3 | NaN | NaN | NaN |
4 | NaN | NaN | NaN |
5 | NaN | NaN | NaN |
6 | NaN | NaN | NaN |
#indexを文字列として入力
df2.index = ['1','2','3']
df1*df2
a | b | c | |
---|---|---|---|
1 | NaN | NaN | NaN |
2 | NaN | NaN | NaN |
3 | NaN | NaN | NaN |
1 | NaN | NaN | NaN |
2 | NaN | NaN | NaN |
3 | NaN | NaN | NaN |
#indexを数値として入力
df2.index = [1,2,3]
df1*df2
a | b | c | |
---|---|---|---|
1 | 0.0 | 1.0 | 2.0 |
2 | 3.0 | 4.0 | 5.0 |
3 | 6.0 | 7.0 | 8.0 |
3. ブロードキャストの利用
dataframe * 行、列
#df1の各行に、df2の2行目をかける
df1*df2.iloc[1]
a | b | c | |
---|---|---|---|
1 | 3.0 | 4.0 | 5.0 |
2 | 3.0 | 4.0 | 5.0 |
3 | 3.0 | 4.0 | 5.0 |
# df1の各列に、df2のc列をかける・・・よりスマートな方法がありそうですが。
(df1.T*df2['c']).T
a | b | c | |
---|---|---|---|
1 | 2.0 | 2.0 | 2.0 |
2 | 5.0 | 5.0 | 5.0 |
3 | 8.0 | 8.0 | 8.0 |
4. スカラー倍
df1*df2.iloc[1,2]
a | b | c | |
---|---|---|---|
1 | 5.0 | 5.0 | 5.0 |
2 | 5.0 | 5.0 | 5.0 |
3 | 5.0 | 5.0 | 5.0 |
0 件のコメント:
コメントを投稿