【发布时间】:2021-09-22 13:21:06
【问题描述】:
我有两个具有以下列的数据框:电话、电子邮件和姓名
Dataframe1 的长度为 20k,而 dataframe2 的长度为 1k。我想使用电子邮件作为两个数据框之间的匹配索引,用 dataframe2 中的电话号码填充 dataframe1 中 Phone 列中的空白。
最好的方法是什么?我试过 combine_frist() 和 Merge() 但 combine_first() 返回同一行中的值,而不是与电子邮件地址匹配的值。 Merge() 的结果是一样的。
我认为我需要将电子邮件设置为索引然后将电话映射到该索引是错误的吗?我觉得这是正确的,但我根本不知道该怎么做。任何帮助表示赞赏!谢谢你:)
例子:
In [1]
import pandas as pd
df1 = pd.DataFrame({'Phone': [1, NaN, 3, 4, 5, NaN, 7],
'Name': ['Bob', 'Jon', 'Iris', 'Jacob','Donald','Beatrice','Jane'],
'Email': ['bob@gmail.com','jon@gmail.com','iris@gmail.com','jacob@gmail.com','donald@gmail.com','beatrice@gmail.com','jane@gmail.cm'})
df2 = pd.DataFrame({'Phone': [2, 1, 3, 5],
'Name': ['Jon', 'Bob', 'Donald'],
'Email': ['jon@gmail.com','bob@gmail.com', 'donald@gmail.com'})
In [2]: df1
Out [2]:
Phone Name Email
1 Bob bob@gmail.com
NaN Jon jon@gmail.com
3 Iris iris@gmail.com
4 Jac jacob@gmail.com
5 Don donald@gmail.com
NaN Bea beatrice@gmail.com
7 Jane jane@gmail.com
x 20000 len
In [3]: df2
Out [3]:
Phone Name Email
2 Jon jon@gmail.com
1 Bob bob@gmail.com
6 Bea beatrice@gmail.com
5 Don donald@gmail.com
x 1100 len
我尝试过的
In [4]: df3 = pd.merge(df1,df2, on="Email", how="left")
Out [4]:
Phone Name Email
1 Bob bob@gmail.com
1 Jon jon@gmail.com
3 Iris iris@gmail.com
4 Jac jacob@gmail.com
5 Don donald@gmail.com
NaN Bea beatrice@gmail.com
7 Jane jane@gmail.com
In [5]: df3 = df1.combine_first(df2)
Out [5]:
Phone Name Email
1 Bob bob@gmail.com
1 Jon jon@gmail.com
3 Iris iris@gmail.com
4 Jac jacob@gmail.com
5 Don donald@gmail.com
NaN Bea beatrice@gmail.com
7 Jane jane@gmail.com
我希望它是什么样子:
In [6]: df3
Out [6]
1 Bob bob@gmail.com
2 Jon jon@gmail.com
3 Iris iris@gmail.com
4 Jac jacob@gmail.com
5 Don donald@gmail.com
6 Bea beatrice@gmail.com
7 Jane jane@gmail.com
【问题讨论】:
-
你能创建一个可重现的例子吗? stackoverflow.com/questions/20109391/…
-
@ifly6 感谢您的建议 - 完成!
-
您的示例解析不正确。