2024-06-23 20:12:47 发布
网友
我有两个不同大小的数据帧。在
{{cd2>{cd6}}和^列是空的。在
在df2上,我有数据库中的所有username、email address和{}。在
username
email address
如何根据用户名将df2合并到df1中? 意思是说df1的大小将保持不变,但是email address和{}列将被填充。当然有来自df2的匹配数据
假设username是唯一的
将^{}与left join和参数suffixes一起使用,lastr remove original columnsemail address和{}(with _):
suffixes
_
df1 = pd.DataFrame({ 'username':list('abccdd'), 'email address':[''] * 6, 'phone number':[''] * 6, 'duration':[5,3,6,9,2,4], }) print (df1) username email address phone number duration 0 a 5 1 b 3 2 c 6 3 c 9 4 d 2 5 d 4 df2 = pd.DataFrame({ 'username':list('abcd'), 'email address':['a@a.sk','b@a.sk','c@a.sk','d@a.sk'], 'phone number':range(4) }) print (df2) username email address phone number 0 a a@a.sk 0 1 b b@a.sk 1 2 c c@a.sk 2 3 d d@a.sk 3
另一种解决方案是使用^{}表示未在列表中定义的所有列名称,使用^{}表示与列的df1中相同的顺序:
df1
c = df1.columns.difference(['email address','phone number']) df = df1[c].merge(df2, on='username', how='left').reindex(columns=df1.columns) print (df) username email address phone number duration 0 a a@a.sk 0 5 1 b b@a.sk 1 3 2 c c@a.sk 2 6 3 c c@a.sk 2 9 4 d d@a.sk 3 2 5 d d@a.sk 3 4
您可以使用这个:
df = df1[['username', 'date', 'time', 'duration']].merge(df2, left_on='username', right_on='username')
示例: df1型
df2型
email address phone number username 0 rrr@ 333444 aa 1 tt@ 555533 bb
输出:
username date time duration email address phone number 0 aa 2015 14:00 5 rrr@ 333444 1 bb 2016 16:00 10 tt@ 555533
将^{} 与left join和参数}(with
suffixes
一起使用,lastr remove original columnsemail address
和{_
):^{pr2}$
另一种解决方案是使用^{} 表示未在列表中定义的所有列名称,使用^{} 表示与列的
df1
中相同的顺序:您可以使用这个:
示例: df1型
^{pr2}$df2型
输出:
相关问题 更多 >
编程相关推荐