Series第二讲 二元运算
二元运算方法总览
-
Series.add/radd
加 -
Series.sub/rsub
减 -
Series.mul/rmul
乘 -
Series.div/rdiv
浮点除法 -
Series.truediv/rtruediv
浮点除法 -
Series.floordiv/rfloordiv
除法向下取整 -
Series.mod/rmod
除法取模 -
Series.pow/rpow
平方 -
Series.combine
组合 -
Series.combine_first
组合 -
Series.round
保留小数 -
Series.lt/le
小于/小于等于 -
Series.gt/ge
大于/大于等于 -
Series.eq/ne
等于/不等于 -
Series.product/prod
所有数值相乘 -
Series.dot
矩阵乘法
详细介绍
先来创建两个简单的Series
In [5]: a = pd.Series([1, 1, 1, np.nan], index=['a', 'b', 'c', 'd'])
In [6]: b = pd.Series([1, np.nan, 1, np.nan], index=['a', 'b', 'd', 'e'])
In [7]: a
Out[7]:
a 1.0
b 1.0
c 1.0
d NaN
dtype: float64
In [8]: b
Out[8]:
a 1.0
b NaN
d 1.0
e NaN
dtype: float64
-
Series.add(other, level=None, fill_value=None, axis=0)
:两个Series相加
参数介绍:
- other:另一个Series对象
- level:MultiIndex(多重索引)时需要的参数
- fill_value:None or float value, default None (NaN) 用来处理缺失值
此处 a.add(b) 和 a + b 具有相同效果
In [9]: a.add(b)
Out[9]:
a 2.0
b NaN
c NaN
d NaN
e NaN
dtype: float64
In [10]: a+b
Out[10]:
a 2.0
b NaN
c NaN
d NaN
e NaN
dtype: float64
可以看出:对应索引位置的数值相加,无相同索引、nan值相加的位置都为nan。
🌟tips🌟:a.radd(b)
代表的意思是 b.add(a)
,即:b + a。r
这个字母是right的意思。其他带r
的操作符同理。
-
Series.sub(other[, level, fill_value, axis])
:表示Series - other
In [11]: a.sub(b)
Out[11]:
a 0.0
b NaN
c NaN
d NaN
e NaN
dtype: float64
-
Series.mul(参数同上)
:表示Series * other
In [51]: a.mul(b)
Out[51]:
a 1.0
b NaN
c NaN
d NaN
e NaN
dtype: float64
-
Series.div(参数同上)
:表示Series / other
In [12]: a.div(b)
Out[12]:
a 1.0
b NaN
c NaN
d NaN
e NaN
dtype: float64
-
Series.truediv(参数同上)
:效果等同于Series.div
-
Series.floordiv(参数同上)
:表示Series // other
x//y
在 python3 中表示两数相除,结果向下取整(舍弃小数部分)
In [13]: a.floordiv(b)
Out[13]:
a 1.0
b NaN
c NaN
d NaN
e NaN
dtype: float64
-
Series.mod(参数同上)
:表示Series % other
x%y
在 python3 中表示两数相除,取结果的余数部分
In [14]: a.mod(b)
Out[14]:
a 0.0
b NaN
c NaN
d NaN
e NaN
dtype: float64
-
Series.pow(参数同上)
:表示Series ** other
x**y
在 python3 中表示x的y次方
In [19]: a.pow(b)
Out[19]:
a 1.0
b 1.0
c 1.0
d NaN
e NaN
dtype: float64
注意⚠️:这里有个细节
1 ** np.nan 结果是 1.0
其他数 2 ** np.nan 结果是 nan
所以 1 的 nan 次方比较特殊,结果并不是 nan
-
Series.combine(other, func[, fill_value])
:组合两个Series
参数介绍:
- func:以两个Series的每个相对位置的元素(标量)为输入并返回一个元素。即输入两个,输出一个。
In [32]: a.combine(other=b, func=max)
Out[32]:
a 1.0
b 1.0
c 1.0
d NaN
e NaN
dtype: float64
说明:这个方法的意思是 每个相同索引的值一同进入func函数中(这里是max),返回func处理后的结果。
-
Series.combine_first(other)
:合并Series,优先取Series的值,如果没有再取other的值
In [33]: a.combine_first(b)
Out[33]:
a 1.0
b 1.0
c 1.0
d 1.0
e NaN
dtype: float64
-
Series.round([decimals])
:保留几位小数
效果等同于 python 里的round
函数
参数介绍:
- decimals:保留几位小数,默认0
In [34]: s = pd.Series([0.1, 1.3, 2.7])
In [35]: s.round()
Out[35]:
0 0.0
1 1.0
2 3.0
dtype: float64
-
Series.lt(other[, level, fill_value, axis])
:表示Series < other
相同索引位置的值进行比较,返回bool值。
le
表示<=
In [36]: a.lt(b)
Out[36]:
a False
b False
c False
d False
e False
dtype: bool
-
Series.gt(参数同上)
:表示Series > other
ge
表示>=
In [38]: a.ge(b)
Out[38]:
a True
b False
c False
d False
e False
dtype: bool
-
Series.eq(参数同上)
:表示Series == other
ne
表示!=
In [39]: a.eq(b)
Out[39]:
a True
b False
c False
d False
e False
dtype: bool
注意⚠️:np.nan != np.nan
-
Series.product(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs
:所有数值的乘积
表示此Series里所有数值的乘积,Series.prod()
等效
参数介绍:
- skipna:bool, default True 计算结果时排除 NA/null 值
- levelint or level name, default None 多级索引时可指定的参数
- numeric_onlybool, default None 默认只计算float, int, boolean类型元素,如果为None,则尝试计算数据
- min_count:能执行相乘操作的值的最小数量,如果不够则该函数返回nan
In [44]: a.prod()
Out[44]: 1.0
In [46]: a.prod(min_count=4)
Out[46]: nan
-
Series.dot(other)
:表示矩阵乘法
也可以表示为 Series @ other
In [49]: s.dot(df)
Out[49]:
0 24
1 14
dtype: int64
In [50]: s@df
Out[50]:
0 24
1 14
dtype: int64
网友评论