gpt4 book ai didi

python - Pandas 基于一列合并不同大小的数据帧

转载 作者:行者123 更新时间:2023-12-01 01:32:57 33 4
gpt4 key购买 nike

我有 2 种不同大小的数据框。

在 df1 上,我有日期时间用户名电子邮件地址电话号码、日志中的持续时间。但是电子邮件地址电话号码只是带有空字符串的列。

在 df2 上,我拥有数据库中的所有用户名电子邮件地址电话号码

如何根据用户名将 df2 合并到 df1 中?这意味着 df1 的大小将保持不变,但将填充电子邮件地址电话号码列。当然还有来自 df2 的匹配数据

假设用户名是唯一的

最佳答案

使用merge使用左连接和参数后缀,最后删除原始列电子邮件地址电话号码(使用_):

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
<小时/>
df = (df1.merge(df2, on='username', how='left', suffixes=('_',''))
.drop(['email address_','phone number_'], axis=1)
.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

另一个解决方案 difference对于列表中未定义的所有列名称和 reindex对于与 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

关于python - Pandas 基于一列合并不同大小的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52660630/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com