栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

记使用Python+Pandas和Scipy库计算TRIMMEAN(截尾均值)的demo

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记使用Python+Pandas和Scipy库计算TRIMMEAN(截尾均值)的demo

需求:一个excel表格,内有46个sheet页,每个sheet页都有30组左右的数据,需要计算每个sheet页中每组数据的TRIMMEAN。并将计算的结果存在当前sheet页中

原始数据格式如图所示,

解决办法:首先是找到计算TRIMMEAN的库,即需要用到scipy中的stats,里边有trim_mean()方法

第二步:要求将d=(1,2,4)的所有a列的数据读取出来,传给trim_mean()进行计算,并将计算结果保存到表格中,

代码如下

import pandas as pd
from scipy.stats import *

excelname = 'dura.xlsx' #原始数据文件
writ = pd.ExcelWriter('dura1.xlsx')  #创建新的excel表格
def trim11(a):  #计算trimmean的函数
    return trim_mean(a,0.2) 



for x in range(0,46):  # 循环读取sheet页
    df = pd.read_excel(excelname,sheet_name=x)  #读取原始数据文件,并通过循环读取不同的sheet页面
    
    dlist = []  #创建空列表,存储duration
    ralist = []  #创建空列表,存储计算的结果rate
    
    dict1 = {"du":0,"ra":0} # 创建字典,存储结构保存使用
    for y in range(1,40):  #循环判断d是否存在,因为每个sheet页中的duration并不是从1开始的,有的从1开始,有的从2开始
        if y in df['d'].values:  #判断d是否存在该值,如果存在,继续下面的代码
            a = df.loc[df['d']==y,['d','a']]  #存在d,则筛选d,例如duration=1,则把所有的1都筛选出来
            aa = a['a'].values  #筛选出来所有的d=1后,把对应的a值取出来,并赋值给aa
            b = trim11(aa)  #将aa变量存储的值传入到计算trimmean的函数中,改函数会返回计算结果,并将结果赋值给b
            # print(x+1,y,b)  #x为sheet名称,y为d,b为a的值
            dlist.append(y)  #将当前循环中的d值添加到dlist列表中
            ralist.append(b)  #将当前循环中计算的a结果添加到ralist列表中
    
    #下面的代码是将列表添加到字典中    
    dict1['du'] = dlist
    dict1['ra']=ralist
    #下面的代码是将dict1字典的数据转换成DataFrame数据,pandas库可以识别的数据,并保存到excel中
    data2 = pd.DataFrame(dict1)
    savedata = pd.concat([df,data2],axis=1)
    savedata.to_excel(writ,sheet_name=str(x+1))  #保存时指定不同的sheet名称

#所有的循环操作结束,将文件进行保存
writ.save()
writ.close()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977864.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号