簡體   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