概述
问题背景:
现有一份EXCEL表格如下,左侧表格中的活动名称
需以右侧表格为基础表格进行匹配。匹配条件为:左侧日期
位于右侧开始时间
与结束时间
范围内,且左侧商品名称
与右侧商品名称
一致。
由于出现了时间范围判断,这是我想到了使用EXCEL的lookup()
函数来进行多条件匹配。这里的lookup()
匹配的是最后一次满足条件的值,但是实际的需求是多值匹配,即如果右侧映射表中有多项满足匹配条件,左侧匹配结果应有多项,且lookup()
函数运行较慢,如果数据量大的话,非常耗时间。
目前的解决方法是:
第一步:计算出左侧表格每一行记录在右侧表格中能够匹配成功的次数。
第二步:将右侧表格中的活动名称数值化(标准化),在左侧表格中使用sumifs()
计算满足条件的活动名称标准值之和。
通过计算出来的和,再进一步分解出和所对应的两个加数(为什么是两个,而不是其他,因为在第一步中计算出来的最大值为2),再进一步通过加数反向匹配该数值对应的活动名称。
这里有一个必须要注意的一点就是,我们必须确保活动名称对应值
两两相加和不相等,只有这样,才可以将sumifs()
计算出来的和分解到两个加数,进而反向匹配成活动名称。
好了,终于讲到了标题部分,如何生成多个两两相加不相等的随机数值呢?我们以生成20个整数且两两相加不相等为例,生成脚本如下:
#生成20个值,两两相加不等
import random
import pandas
sum_obj=pd.DataFrame(columns=["和","值1","值2"],index=[0,1,2])
sum_obj.loc[0,"和"]=3
sum_obj.loc[0,"值1"]=2
sum_obj.loc[0,"值2"]=1
sum_obj.loc[1,"和"]=3
sum_obj.loc[1,"值1"]=2
sum_obj.loc[1,"值2"]=1
sum_obj.loc[2,"和"]=3
sum_obj.loc[2,"值1"]=2
sum_obj.loc[2,"值2"]=1
#只有21个整数两两相加的和均不相等的时候,才跳出当前循环
while len(sum_obj["和"])!=len(sum_obj["和"].drop_duplicates()):
sum_obj=pd.DataFrame(columns=["和","值1","值2"])
random_list=random.sample(range(1,10000),20)#随机生成1-100范围内的20个整数
for i in np.arange(0,20):
for j in np.arange(i,20):
sum_value=random_list[i]+random_list[j]
temp=[sum_value,random_list[i],random_list[j]]
temp=pd.DataFrame(temp)
temp=temp.T
temp.rename(columns={0:"和",1:"值1",2:"值2"},inplace=True)
sum_obj=sum_obj.append(temp)
最后
以上就是无语大象为你收集整理的Python pandas 随机生成20个整数且两两相加不相等的全部内容,希望文章能够帮你解决Python pandas 随机生成20个整数且两两相加不相等所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复