基于内连接连接字符串

N08*_*N08 6 python join dataframe pandas

我有两个包含相同列的DataFrame; an id,a date和a str:

df1 = pd.DataFrame({'id':      ['1', '2', '3', '4', '10'], 
                    'date':    ['4', '5', '6', '7', '8'],
                    'str':     ['a', 'b', 'c', 'd', 'e']})

df2 = pd.DataFrame({'id':      ['1', '2', '3', '4', '12'], 
                    'date':    ['4', '5', '6', '7', '8'],
                    'str':     ['A', 'B', 'C', 'D', 'Q']})
Run Code Online (Sandbox Code Playgroud)

我想在iddate列上加入这两个数据集,并创建一个结果列,它是以下的连接str:

df3 = pd.DataFrame({'id':      ['1',  '2',   '3',  '4', '10', '12'], 
                    'date':    ['4',  '5',   '6',  '7', '8',  '8'],
                    'str':     ['aA', 'bB', 'cC', 'dD', 'e', 'Q']})
Run Code Online (Sandbox Code Playgroud)

我想我可以进行内部连接然后连接字符串,但有没有更简单的方法来实现这一点?

WeN*_*Ben 6

IIUC concat+groupby

pd.concat([df1,df2]).groupby(['date','id']).str.sum().reset_index()
Out[9]: 
  date  id str
0    4   1  aA
1    5   2  bB
2    6   3  cC
3    7   4  dD
4    8  10   e
5    8  12   Q
Run Code Online (Sandbox Code Playgroud)

如果我们考虑sum()基于水平的效率

pd.concat([df1,df2]).set_index(['date','id']).sum(level=[0,1]).reset_index()
Out[12]: 
  date  id str
0    4   1  aA
1    5   2  bB
2    6   3  cC
3    7   4  dD
4    8  10   e
5    8  12   Q
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 6

使用radd:

i = df1.set_index(['date', 'id'])
j = df2.set_index(['date', 'id'])

j['str'].radd(i['str'], fill_value='').reset_index()

  date  id str
0    4   1  aA
1    5   2  bB
2    6   3  cC
3    7   4  dD
4    8  10   e
5    8  12   Q
Run Code Online (Sandbox Code Playgroud)

这应该很快.