我正在编写一个函数,通过该函数可以将两个主键中的任何一个与其他列值进行比较。该函数应返回公共部门和人员列表,且编号最少。价格/小时$。如果两个主键都不存在Department&People的特定组合,则不应将其作为结果的一部分。问题在于数据集具有广泛的类别,需要将其与各个类别进行比较和匹配。
例如-
数据框df是
Primary_Key Department People Price/Hour$
A Fin Amy 12
A Fin Kate 12
A Fin Ross 5
A HR1 Amy 7
A HR1 Kate 7
B Fin Amy 8
B Fin Bon 8
B Fin Ross 6
B All HR Kate 12
C HR2 Kate 20
在上面,“所有HR”是一个广义类别,属于HR1,HR2。在实际数据部门中,有许多此类广泛的类别。现在,如果我将所有HR与HR1进行比较,则该函数应返回HR1,因为它是一个狭窄的类别。 该功能应根据以下情况得出:
Function (A,B) should return:
Fin Amy 8
Fin Ross 5
HR1 Kate 7
函数(A,C)应该返回Nill
Function(B,C) should return:
HR2 Kate 12
我正在尝试以下方法: 为每个主键定义两个数据框:
df1 = df[df['Primary_Key']=='A']
df2 = df[df['Primary_Key']=='B']
df2 = df2.rename(columns={'Price/hour$': 'Price/hour1$'})
定义用于部门映射的新数据框
departcode = [('Department',['Fin','Fin1','Fin2','All Fin','HR1','HR2','All HR']),('Map',['Fin','Fin','Fin','Fin','HR','HR','HR'] )]
df3=pd.DataFrame.from_items(departcode)
为“地图”加入df1和df3,df2和df3。
我被困在这里。逻辑应该是这样的
Where ((df1['Map'] == df2['Map']) & ((df1['Department'] == df1['Department']) OR ( df1['Department'] contains 'All' OR df2['Department'] contains 'All')) and (df1['People'] == df2 ['People'])
Join the qualifying rows of df1, df2
return row with department, people & minimum (Price/Hour$)