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