我有以下数据框,其中ORDER_ID为公共列。我必须匹配df2中每个ORDER_ID的EMP_ID。几个订单可以匹配相同的EMP_ID。
DF:
ORDER_ID TYPE EMP_ID
0 23991 A 9233
1 31106 A 2457
2 30062 A 2457
3 30062 A 1234
DF2:
ORDER_ID O_INFO YEAR PRICE
0 23991 OK 2011 100
1 31106 OK 2000 200
2 30062 OK 2000 300
输出应该是: 由于许多员工将参加一个订单,我希望对参加该订单的所有员工进行分组和映射
ORDER_ID O_INFO YEAR PRICE EMP_ID
0 23991 OK 2011 100 9233
1 31106 OK 2000 200 2457
2 30062 OK 2000 300 2457,1234
我尝试了如下地图功能: df = df.set_index('ORDER_ID')
df2 ['EMP'] = df2[‘ORDER_ID’].map(df[‘EMP_ID'])
我收到错误:因为ORDER_ID中的值不是唯一的设置为索引。但是如果没有设置索引,map功能就不起作用。它返回NaN值而不设置索引。
InvalidIndexError: Reindexing only valid with uniquely valued Index objects
执行合并不会映射ORDER的EMP_ID,但会再次返回Nan值
df.merge(df2, on='ORDER_ID', how='left')
答案 0 :(得分:1)
我认为您需要在EMP_ID
中使用ORDER_ID
重复join
汇总map
,然后s = df1['EMP_ID'].astype(str).groupby(df1['ORDER_ID']).apply(', '.join)
print (s)
ORDER_ID
23991 9233
30062 2457, 2457
31106 2457
Name: EMP_ID, dtype: object
df2['EMP'] = df2['ORDER_ID'].map(s)
print (df2)
ORDER_ID O_INFO YEAR PRICE EMP
0 23991 OK 2011 100 9233
1 31106 OK 2000 200 2457
2 30062 OK 2000 300 2457, 2457
完美地运作:
console.log('start', new Date());