Pandas:在具有重复值的map操作之前设置列的索引

时间:2018-01-19 08:32:55

标签: python pandas dataframe

我有以下数据框,其中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')

1 个答案:

答案 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());