VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • pandas(6):数学统计2

除了对原始数据进行简单的统计计算外,有时候我们还需要对数据进行一定变化再做计算。pandas自带一些基础函数支持这些变化。源Excel文件maths_pro.xlsx:
image

一、位移增量df.diff()和位移操作df.shift()

①df.shift()

df.shift(periods=1, freq=None, axis=0)

参数说明:

  • periods:int,表示移动的幅度,正数或负数,默认值是1。注意这里移动的都是数据,而索引是不移动的,移动之后没有对应值的,就赋值为NaN。
  • axis:{0, 1, ‘index’, ‘columns’},表示移动的方向,如果是0或者’index’表示上下移动,如果是1或者’columns’,则会左右移动。
  • freq,DateOffset, timedelta, or time rule string,可选参数,默认值为None,只适用于时间序列,如果这个参数存在,那么会按照参数值移动时间索引(索引有很多种类型),而数据值没有发生变化。
df = pd.read_excel(r'C:/Users/asus/Desktop/Python/maths_pro.xlsx')
df

image

df.shift() # 默认数据向下偏移一个单位
# 设置轴向,向右偏移一个单位,数据类型不匹配,也会设置为NaN值
df.shift(axis=1)

image

df.shift(periods=-2) # 向上偏移两个单位

image

②df.diff()

df.diff(periods=1, axis=0)

做位移差操作(不仅位移而且还做了减操作)。用在一个序列性数据中上一个数据和下一个数据之前的差值,增量计算。

df['语文'].diff()
# 等价
df['语文']-df['语文'].shift()

二、排名计算df.rank()

参考文章:https://zhuanlan.zhihu.com/p/87593543(分组排名)

df.rank(axis=0, method='average', numeric_only=None, 
        na_option='keep', ascending=True, pct=False)

功能:沿着某个轴(0或者1)计算对象的排名
返回值:以Series或者DataFrame的类型返回数据的排名(哪个类型调用返回哪个类型)
参数说明:

  • axis:设置沿着哪个轴计算排名(0或者1)
  • numeric_only:是否仅仅计算数字型的columns,布尔值
  • na_option:NaN值是否参与排序及如何排序(‘keep’,‘top',’bottom')
  • ascending:设定升序排还是降序排,默认为升序True
  • pct:是否以排名的百分比显示排名(当前排名与总数的百分比)
  • method:排名方式选择('average','first','min', 'max','dense')
    'average', 跳跃排序,并列取平均排名
    'max',跳跃排序,并列取最小排名
    'min',跳跃排序,并列取最大排名
    'dense',密集排序,并列取排名相同,排名不跳跃
    'first',顺序排序,相同时,谁在前排名靠前,排名不跳跃
# 对语文成绩降序排序,取其中三列
df = df.sort_values(by='语文')[['姓名','语文']]
df

image

# 5种不同排序方法的比较
df['first'] = df['语文'].rank(method='first')
df['average'] = df['语文'].rank()
df['max'] = df['语文'].rank(method='max')
df['min'] = df['语文'].rank(method='min')
df['dense'] = df['语文'].rank(method='dense')
df['pct'] = df['语文'].rank(pct=True)
df

image
分组排序:

df = df.sort_values(by=['班级','语文']).reset_index(drop=True)
df['分组排序'] = df.groupby('班级').apply(lambda x:x['语文'].rank(method='dense')).reset_index(drop=True)
df

image

三、其他常用数学计算

df.eval('result=first + average',inplace=True) # 表达式计算生成新列

# 四舍五入
df.round(2) # 全部数字字段
df.round({'result': 0, 'pct': 3}) # 指定列

df + 1 
df.add() # 加
df.sub() # 减
df.mul() # 乘
df.div() # 除
df.mod() # 模,除后的余数
df.pow() # 指数幂
df.dot(df2) # 矩阵运算

# series特有的函数
s = df['result']
s.nlargest() # 最大的前5个
s.nlargest(15) # 最大的前15个
s.nsmallest() # 最小的前5个
s.nsmallest(15) # 最小的前15个

s.value_counts() # 去重分组统计
s.pct_change() # 与前一个数变化的百分比=(今-前)/前
 
文章出处:https://www.cnblogs.com/XiaoYang-sir/p/14688294.html


相关教程