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)
我想在id
和 date
列上加入这两个数据集,并创建一个结果列,它是以下的连接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)
我想我可以进行内部连接然后连接字符串,但有没有更简单的方法来实现这一点?
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)
使用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)
这应该很快.
归档时间: |
|
查看次数: |
119 次 |
最近记录: |