繁体   English   中英

pandas:用于合并多列的循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM