pandas 检查疑似刷达标率的那些网点

  有 n 天的数据,每天的数据在一个excel文件中,每天都有新激活的设备,达标率的定义是:

激活的四十天之内,任意连续十天(包括连续5天每天投件率达30%以上)平均投件率达30% 及以上定义为达标

先选取 60-70天之前的那些激活设备,所有的设备数据都在total.csv 这个文件中。

第一:选取激活时间在 60-70天之前的那些设备

#two 读取 并选择 在 70天-80天前激活的设备 并将这些设备保存
two = pd.read_csv(r'E:\total\total.csv')
two['首次激活时间']=two['首次激活时间'].apply(lambda x:str(x).split(' ')[0]) #将激活时间正常字符串
two = two.loc[two['首次激活时间'].apply(lambda x:True if '2018-10-22'< x < '2018-11-02'else False) ,]

two.to_csv(r'E:\total\total1.csv')

 第二:将这些激活的设备进行判断,选择那些达标的设备ID选择出来

#three 将这些激活设备中达标的(激活四十天内任意连续10天(包括连续5天每天投件率达30%以上)平均投件率达30%及以上定位达标
three = pd.read_csv(r'E:\total\total1.csv')[['日期','设备ID','设备类型','首次激活时间','投件率']]
print(three.head())


def choose(x):
    list_ = [] #用来存储达标的那些 设备ID
    # print(random.random())
    index_ = x.index.levels[0] #将最外层的索引存在这里(设备ID)

    for i in  index_:
        lone = x.loc[i] #选取当个设备ID的每日投件率
        if lone.count() > 35:
            for j in range(30): #选择那些连续10天的投件率平均值大于0.3的设备ID
                if lone[j:j+10].mean() >= 0.3:
                    list_.append(i)
                    break
            for z in range(35):

                if (lone[z:z+5] >= 0.3).all(): #选择那些 连续五天每天投件率都大于0.3的设备ID
                    list_.append(i)
                    break



    else:

        print(list(set(list_)),'\n',len(list(set(list_))))
        # exit(0)

        print('执行到这里了')
        # pd.Series(list(set(list_))).to_csv(r'E:\total\test.csv')
        return list(set(list_))

a = three.groupby(['设备ID','日期']).sum().apply(choose) #加一个sum函数将整个筛选出来的Dataframe传给了apply中的函数中去了
                                                          #如果不加函数的话 传进apply函数中去的就是一个个拆开的
                                                          #a 是一个含有达标设备ID列表 的一个Series(只有一个元素,且是一个列表)
print('这是a:%s %s'%(a,type(a)))

for i in a:
    pd.DataFrame({'设备ID': i}).to_excel(r'E:\total\three.xlsx')

 第三:将这些达标的设备ID和激活设备进行匹配,得到这些的设备ID所对应的每日数据

# four 将这些达标的设备ID和设备匹配出来
three = pd.read_csv(r'E:\total\total1.csv')[['日期','设备ID','设备类型','首次激活时间','投件率']] #所有合适的时间段内激活的设备
three_ = pd.read_excel(r'E:\total\three.xlsx')  #所有达标的设备ID
four = pd.merge(three_,three)
four.to_excel(r'E:\total\four.xlsx')

第四:观察这些达标设备,对着设备新设立了两个指标(70天内大于20%的天 ,激活的40天内是否有35天投件率大于20% ,进行统计

# Five观察这些达标数据
five = pd.read_excel(r'E:\total\four.xlsx')

def func1_(x):
    count_total = x.count()
    return count_total

def func1(x): #70天内大于20%的天数
    # print(x.count())
    count_ = 0  #汇总大于20%的个数
    for i in x:
        if i > 0.2:
            count_ += 1
    else:
        return count_

def func2(x): #70天内大于20%的天数占比
    count_1 = x.count()
    count_ = 0  #汇总大于20%的个数
    for i in x:
        if i > 0.2:
            count_ += 1
    else:
        return count_/count_1


def func3(x): #如果天数大于是否有任意连续35天大于20%
    # print(x[:20])
    # exit()
    count_1 = x.count()
    if count_1 > 35:
        # for j in [i for i in range(count_1)][:-35]:
        #     if (x[j:j+35] >= 0.2).all():
        x_ = x.dropna()[:40] #去掉那些为空的数据(不去掉为空的数据可能含有大量的空数据)

        if x_[x_>0.1].count() >=35:
            return '是'
        else:
            return '否'
    else:
        return '数据有缺失'







# 不在原有的DataFrame表格上进行修改 另外新弄一个表格进行统计
new = five.groupby(['设备ID','日期'])['投件率'].sum().unstack()

six = five.groupby(['设备ID','日期'])['投件率'].sum().unstack()

six['激活40天是否有35天大于20%'] = new.apply(lambda x:func3(x),axis =1).values #是否有任意连续35天大于20%
print(six.head())
six['总天数'] = new.apply(lambda x: func1_(x), axis=1).values  # 返回总天数

six['投件率大于0.2的天数'] = new.apply(lambda x:func1(x),axis =1).values #返回投件率大于0.2的天数
six['投件率大于0.2的天数的占比'] = new.apply(lambda x:func2(x),axis =1).values #返回投件率大于0.2的天数的占比
if os.path.exists(r'E:\total\six.xlsx'): #判断文件是否存在
    os.remove(r'E:\total\six.xlsx')      #如果存在文件则删除
six[['激活40天是否有35天大于10%','总天数','投件率大于0.2的天数','投件率大于0.2的天数的占比']].to_excel(r'E:\total\six.xlsx')

 

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值