有条件地联接/合并熊猫数据框列

时间:2018-08-10 06:10:44

标签: python-3.x pandas

我正在编写一个函数,通过该函数可以将两个主键中的任何一个与其他列值进行比较。该函数应返回公共部门和人员列表,且编号最少。价格/小时$。如果两个主键都不存在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$)

0 个答案:

没有答案