基于内连接连接字符串

时间:2018-03-09 15:13:31

标签: python pandas dataframe join

我有两个包含相同列的DataFrame;一个id,一个date和一个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']})

我想在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']})

我想我可以进行内连接,然后连接字符串,但是有更简单的方法来实现吗?

2 个答案:

答案 0 :(得分: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

如果我们根据级别

使用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

答案 1 :(得分: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

这应该很快。