我有以下数据框(df)。
我想创建一个名为RCA的列,如果(empPeople/TotalEmpRegion)/(totalEmpActivity/totalEmp)>1,则该列取值为1,否则为0。然后我将转换这个df为透视表(pivot table),索引(index)=region,列(column)=activity,值(values)=rca。
我编写了以下函数:
然后我使用apply方法创建了一个名为rca的列。
问题在于apply函数需要太长时间(6047秒)。我想知道是否有更快的方法来完成这个任务?
活动(activity) | 地区(region) | 从业人员(empPeople) |
---|---|---|
12122 | 1101 | 2 |
23322 | 1233 | 40 |
22223 | 2323 | 0 |
... | ... | ... |
我编写了以下函数:
def rca_emp(activity:str, region:str , emp:float):
top = emp / df[df['region'] == region].empPeople.sum()
bottom = df[df['activity'] == activity].empPeople.sum() / df.empPeople.sum()
rca = top/bottom
if rca > 1:
return 1
else:
return 0
然后我使用apply方法创建了一个名为rca的列。
# finding RCA
df['rca'] = df.apply(lambda x : rca_emp(activity=x['activity'] , region=x['region'] , emp=x['empPeople']) , axis=1)
# create a binary matrix
df.pivot(index='region', columns='activity', values='rca')
问题在于apply函数需要太长时间(6047秒)。我想知道是否有更快的方法来完成这个任务?
emp
是什么?是标量吗? - jezrael