1. DataFrame之间的运算
-
在运算中自动对齐不同索引的数据
-
如果索引不对应,则补NaN
-
DataFrame没有广播机制
导包
# 导包
import numpy as np
import pandas as pd
创建 DataFrame df1 不同人员的各科目成绩,月考一
# 创建DataFrame二维数组
df1 = pd.DataFrame(
data = np.random.randint(10,100,size=(3,3)),
index = ["小明","小红","小黄"],
columns = ["语文","数学","英语"]
)
df1
| 语文 | 数学 | 英语 |
---|
小明 | 59 | 26 | 58 |
---|
小红 | 14 | 74 | 53 |
---|
小黄 | 49 | 28 | 99 |
---|
创建 DataFrame df2 不同人员的各科目成绩,月考二
df2 = pd.DataFrame(
data = np.random.randint(10,100,size=(3,3)),
index = ["小明","小红","小黄"],
columns = ["语文","数学","英语"]
)
df2
| 语文 | 数学 | 英语 |
---|
小明 | 55 | 71 | 13 |
---|
小红 | 42 | 49 | 55 |
---|
小黄 | 34 | 68 | 36 |
---|
DataFrame和标量之间的运算
df1 + 100
| 语文 | 数学 | 英语 |
---|
小明 | 159 | 126 | 158 |
---|
小红 | 114 | 174 | 153 |
---|
小黄 | 149 | 128 | 199 |
---|
df1 - 100
| 语文 | 数学 | 英语 |
---|
小明 | -41 | -74 | -42 |
---|
小红 | -86 | -26 | -47 |
---|
小黄 | -51 | -72 | -1 |
---|
df1 * 100
| 语文 | 数学 | 英语 |
---|
小明 | 5900 | 2600 | 5800 |
---|
小红 | 1400 | 7400 | 5300 |
---|
小黄 | 4900 | 2800 | 9900 |
---|
df1 / 100
| 语文 | 数学 | 英语 |
---|
小明 | 0.59 | 0.26 | 0.58 |
---|
小红 | 0.14 | 0.74 | 0.53 |
---|
小黄 | 0.49 | 0.28 | 0.99 |
---|
df1 % 10
df1 ** 2
语文 | 数学 | 英语 | |
---|
小明 | 3481 | 676 | 3364 |
---|
小红 | 196 | 5476 | 2809 |
---|
小黄 | 2401 | 784 | 9801 |
---|
DataFrame之间的运算
# 必须匹配行和列的索引
df1 + df2
| 语文 | 数学 | 英语 |
---|
小明 | 84 | 50 | 116 |
---|
小红 | 85 | 144 | 145 |
---|
小黄 | 121 | 115 | 179 |
---|
使用 .add() 函数,填充数据
df3 = pd.DataFrame(
data = np.random.randint(10,100,size=(4,4)),
index = ["小明","小红","小黄","小绿"],
columns = ["语文","数学","英语","物理"]
)
display(df1,df3)
| 语文 | 数学 | 英语 |
---|
小明 | 59 | 26 | 58 |
---|
小红 | 14 | 74 | 53 |
---|
小黄 | 49 | 28 | 99 |
---|
| 语文 | 数学 | 英语 | 物理 |
---|
小明 | 30 | 40 | 59 | 59 |
---|
小红 | 46 | 72 | 56 | 96 |
---|
小黄 | 25 | 20 | 99 | 73 |
---|
小绿 | 92 | 78 | 41 | 44 |
---|
df1 + df3
| 数学 | 物理 | 英语 | 语文 |
---|
小明 | 66.0 | NaN | 117.0 | 89.0 |
---|
小红 | 146.0 | NaN | 109.0 | 60.0 |
---|
小绿 | NaN | NaN | NaN | NaN |
---|
小黄 | 48.0 | NaN | 198.0 | 74.0 |
---|
# 先填充0,再相加
df1.add(df3,fill_value=0)
| 数学 | 物理 | 英语 | 语文 |
---|
小明 | 66.0 | 59.0 | 117.0 | 89.0 |
---|
小红 | 146.0 | 96.0 | 109.0 | 60.0 |
---|
小绿 | 78.0 | 44.0 | 41.0 | 92.0 |
---|
小黄 | 48.0 | 73.0 | 198.0 | 74.0 |
---|
# 除法
df1.divide(df3,fill_value=2)
| 数学 | 物理 | 英语 | 语文 |
---|
小明 | 0.650000 | 0.033898 | 0.983051 | 1.966667 |
---|
小红 | 1.027778 | 0.020833 | 0.946429 | 0.304348 |
---|
小绿 | 0.025641 | 0.045455 | 0.048780 | 0.021739 |
---|
小黄 | 1.400000 | 0.027397 | 1.000000 | 1.960000 |
---|
2. Series与DataFrame之间的运算
s = pd.Series([100,10,1],index=df1.columns)
s
语文 100
数学 10
英语 1
dtype: int64
df1 + s
| 语文 | 数学 | 英语 |
---|
小明 | 159 | 36 | 59 |
---|
小红 | 114 | 84 | 54 |
---|
小黄 | 149 | 38 | 100 |
---|
df1.add(s)
| 语文 | 数学 | 英语 |
---|
小明 | 159 | 36 | 59 |
---|
小红 | 114 | 84 | 54 |
---|
小黄 | 149 | 38 | 100 |
---|
# axis:(0 or "index",1 or "columns"),默认为列
df1.add(s,axis="columns")
| 语文 | 数学 | 英语 |
---|
小明 | 159 | 36 | 59 |
---|
小红 | 114 | 84 | 54 |
---|
小黄 | 149 | 38 | 100 |
---|
df1.add(s,axis=1)
| 语文 | 数学 | 英语 |
---|
小明 | 159 | 36 | 59 |
---|
小红 | 114 | 84 | 54 |
---|
小黄 | 149 | 38 | 100 |
---|
s = pd.Series([100,10,1],index=df1.index)
s
小明 100
小红 10
小黄 1
dtype: int64
# 行
df1.add(s,axis=0)
| 语文 | 数学 | 英语 |
---|
小明 | 159 | 126 | 158 |
---|
小红 | 24 | 84 | 63 |
---|
小黄 | 50 | 29 | 100 |
---|
df1.add(s,axis="index")
| 语文 | 数学 | 英语 |
---|
小明 | 159 | 126 | 158 |
---|
小红 | 24 | 84 | 63 |
---|
小黄 | 50 | 29 | 100 |
---|