美文网首页
Series第二讲 二元运算

Series第二讲 二元运算

作者: butters001 | 来源:发表于2020-09-16 11:24 被阅读0次

    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
    
    1. 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的操作符同理。

    1. 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
    
    1. Series.mul(参数同上):表示Series * other
    In [51]: a.mul(b)                                                               
    Out[51]: 
    a    1.0
    b    NaN
    c    NaN
    d    NaN
    e    NaN
    dtype: float64
    
    1. Series.div(参数同上):表示Series / other
    In [12]: a.div(b)                                                               
    Out[12]: 
    a    1.0
    b    NaN
    c    NaN
    d    NaN
    e    NaN
    dtype: float64
    
    1. Series.truediv(参数同上):效果等同于 Series.div
    1. 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
    
    1. 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
    
    1. 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
    
    1. 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处理后的结果。

    1. 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
    
    1. 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
    
    1. 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
    
    1. Series.gt(参数同上):表示Series > other

    ge表示>=

    In [38]: a.ge(b)                                                                
    Out[38]: 
    a     True
    b    False
    c    False
    d    False
    e    False
    dtype: bool
    
    1. 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

    1. 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
    
    1. 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
    

    继续 坚持 ✊ ✊ ✊!!!

    相关文章

      网友评论

          本文标题:Series第二讲 二元运算

          本文链接:https://www.haomeiwen.com/subject/ropcyktx.html