这个问题应该算是挺常见的,所以记录下。
Q:数据已经按顺序排好了,有一列订单号数据是重复的,计算该订单号是第几次出现。
excel的解法:https://zhidao.baidu.com/question/355551600.html
A列是数据 在B1输入
=countif($a$1:a1,a1)
然后下拉填充数据即可,但是在Excel中这样做的话计算量非常大,因为这个任务是每个月算一次,每月大概15W条记录,电脑跑起来太久了。今天一下要算3个月的,好吧,拿出python来跑。
先讲讲思路
这个是在《数据科学入门》这门书上看到的,当时实现的功能计算单词总共出现了多少次,即统计词频。这个对python来说特别简单,调用库一下就得出结果了。
但这本书很讲究从0开始,所以用的方法很基础
from collections import defaultdict
word_count=defaultdict(int) #int()生成0
for word in document:
word_count[word]+=1
所以字典word_count会一个一个的加上去,这不就是我们需要的第几次出现嘛~所以改进一下。
使用pandas,将数据变成dataframe形式
from collections import defaultdict
import pandas as pd
order_count = defaultdict(int)
def num(order):
order_count[order]+=1
return order_count[order]
def count_order_num():
#读取数据,从Excel读取。
path = r' '
data = pd.read_excel(path, sheetname='Sheet0', header=0)
#按时间排序先
data.sort_values('抽检时间', inplace=True)
#计算几次出现
data['第几次出现'] = data.apply(lambda x:num(x['下单编号']) , axis=1 )
print(data)
# 保存到excel
save_path = r' '
write = pd.ExcelWriter(save_path)
data.to_excel(write, sheet_name='Sheet1', header=True, index=False)
write.save()
print('ok')
if __name__ == '__main__':
count_order_num()
用字典order_count记录下单编号,每次来一个就+1,然后返回当前的统计到的数字,就是该下单编号第几次出现。
还有Office2016安装真的是很烦人,这几天Excel出了问题删掉重装,结果安装报错错误代码:30180-4
试了好久还是没装上,烦人
网友评论