[英]pandas: for loop to merge on multiple columns
我有两个要合并的数据框。 第一个数据集有代理 ID 和多个列,其中包含分配给每个代理的技能。
df1:
登录ID | 技能作业 1 | 技能作业 2 | 技能作业 3 |
---|---|---|---|
1000。 | 500 | 7008。 | 1655. |
1001。 | 2590。 | 3846. | 3847. |
1002。 | 500。 | 2226。 | . |
第二个 dataframe 具有按座席和技能拆分的呼叫量信息。
df2:
逻辑。 | 技能 | 通话量 |
---|---|---|
1000。 | 500。 | 150。 |
1000。 | 7008。 | 54. |
1000。 | 1655. | 70. |
1001。 | 2590。 | 30. |
1001。 | 3846. | 240。 |
1001。 | 3847. | 120. |
1002。 | 500 | 230。 |
1002。 | 2226。 | 45. |
我正在尝试使用 for 循环向每个座席和技能分配添加呼叫量,df 有 120 列,以创建具有技能分配和呼叫量的新 df:
DF3:
登录ID | 技能作业 1 | 通话音量 1 | 技能作业 2 | 呼叫音量 2 |
---|---|---|---|---|
1000。 | 500 | 150。 | 7008。 | 54. |
1001。 | 2590。 | 30. | 3846. | 240。 |
1002。 | 500。 | 230。 | 2226。 | 45. |
我正在尝试合并这两个数据集并在每次添加时重命名呼叫量列:
for i in number_list:
df3 = pd.merge(df1, df2, how = 'left', left_on = [df1['Login ID'], df1['Skill Assignment ' +str(i)]], right_on = ['Logid', 'Skill'])
df3.rename({'Call Volume' : 'Call Volume ' + str(i)}, axis = 1, inplace = True).drop(['Logid', 'Skill'], axis = 1)
当代码运行时,它只保留 120 列。 有没有办法保留每一列或更适当的方法来为每项技能添加呼叫量?
假设 '.' df1 和 df2 中出现的字符不存在,
我认为您正在寻找的是这些方面的东西,使用melt
:
df1_melt=pd.melt(df1,id_vars='Login ID', value_name='Skill', var_name='Skill Assignment')
df3=df2.merge(df1_melt, left_on=['Logid.','Skill'], right_on=['Login ID','Skill'], how='left').drop('Logid.', axis=1)
我相信 df3 是您正在寻找的关系。 如果需要进一步分组,可以使用pivot:
df_pivot=df3.pivot_table(index=['Login ID'], columns=['Skill'], values=['Call Volume','Skill Assignment'] )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.