我正在尝试使用pandas合并两个或多个数据框:
DF1:
Name E-mail Phone Number
Trent trent@example.com 12341234
Barry barry@example.com 12345678
Jared jared@example.com 56781234
DF2:
Name E-mail Age
Trent trent@example.com 24
Barry barry@example.com 18
Jared jared@example.com 31
代码:
df1 = pd.read_excel("Book1.xlsx")
df2 = pd.read_excel("Book2.xlsx")
files = [df1,df2]
df_all = reduce(lambda left,right: pd.merge(left, right, on='Name'), files)
df_all = df_all.drop_duplicates(subset='Name', keep='first')
df_all = df_all.fillna(0)
现在的输出是:
Name E-mail_x Age E-mail_y Phone Number
Trent trent@example.com 24 trent@example.com 12341234
Barry barry@example.com 18 barry@example.com 12345678
Jared jared@example.com 31 jared@example.com 56781234
无论如何,都可以删除“ _x”和“ _y”并使它们只是一列
预期输出:
Name E-mail Age Phone Number
Trent trent@example.com 24 12341234
Barry barry@example.com 18 12345678
Jared jared@example.com 31 56781234
编辑:列名[电子邮件,年龄,电话号码]不是恒定的,可以更改,因此在大多数情况下列名是未知的
答案 0 :(得分:1)
仅供参考,您不需要reduce函数,只需使用:
df_all = df1.merge(df2)
由于您要合并“名称”,因此正在复制列。如果所有列都相同,则可以删除on ='Name'参数,它将在所有公共列上合并而不是复制它们。
或者,您只能合并来自df2的非重复列:
df_all = df1.merge(df2[['Name','Age']])
答案 1 :(得分:0)
您也可以使用功能join
:
COMMON_COLUMNS = ["name", "email"]
df3 = df1.join(df2.set_index(COMMON_COLUMNS), on=COMMON_COLUMNS)
df3 = df3.drop_duplicates(subset=COMMON_COLUMNS, keep='first')
您可以在联接之前或之后删除重复项。