填充随机数满足Python中的交叉表约束

2024-07-04 05:08:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,修改一个数据帧(实际数据)以满足交叉表约束,并生成一个新的数据帧,如下所述:

在交叉表1(附pic n代码)中,我们有2个任务给John在区域A,1个任务给John在区域B,依此类推。但是,我想要的分布如交叉表2所示,即John在A区有1个任务,在B区有4个任务等。因此,我需要修改交叉表1所示的原始数据,以满足交叉表2中所需的行和列合计约束,而总计应保持为18,如两个交叉表中所示。数字填充可以是随机的

另一个限制是平均时间,例如,John应该是11分钟(平均03个任务),William是7分钟,Richard是5分钟(03个任务)。在

因此,任务是修改原始数据帧,使其满足crosstab2中的行、列总和和平均时间要求。最终的数据帧将有三列:Person、Area of Work和Time,并将生成一个类似于crosstab2的交叉表,同时随机填充数字

Cross tab2- Required

Cross tab1- Actual Data

  1. 实际数据:

    df=pd数据帧([[“约翰”,“A”,2,8],“约翰”,“B”,1,9],“约翰”,“C”,0,12],“威廉”,“A”,1,14],“威廉”,“B”,2,10],“威廉”,“C”,2,9],“理查德”,“A”,3,8],“理查德”,“B”,4,7],“理查德”,“C”,3,5]],列=[“个人”,“工作领域”,“任务”,“时间”])

1.1实际交叉表:

pd.crosstab(df.AreaOfWork, df.Person, values=df.Task, aggfunc=np.sum, margins=True)
  1. 所需数据帧

    df1=pd数据帧([[“约翰”,“A”,1,10],“约翰”,“B”,4,11],“约翰”,“C”,3,12],“威廉”,“A”,0,9],“威廉”,“B”,1,7],“威廉”,“C”,3,5],“理查德”,“A”,2,5],“理查德”,“B”,1,3],“理查德”,“C”,3,8]],列=[“个人”,“工作领域”,“任务”,“时间”])

2.1所需交叉表

^{pr2}$

Tags: 数据区域df原始数据时间数字john交叉

热门问题