我在Jupyter Notebook上使用python 3.4,尝试合并两个数据框,如下所示:
df_A.shape (204479, 2) df_B.shape (178, 3) new_df = pd.merge(df_A, df_B, how='inner', on='my_icon_number') new_df.shape (266788, 4)
我认为new_df
合并上面应该有几行,df_A
因为合并就像一个内连接.但为什么new_df
这里实际上有更多行df_A
?
这是我真正想要的:
我的意思df_A
是:
id my_icon_number ----------------------------- A1 123 B1 234 C1 123 D1 235 E1 235 F1 400
我的意思df_B
是:
my_icon_number color size ------------------------------------- 123 blue small 234 red large 235 yellow medium
然后我想new_df
成为:
id my_icon_number color size -------------------------------------------------- A1 123 blue small B1 234 red large C1 123 blue small D1 235 yellow medium E1 235 yellow medium
我真的不想删除df_A中my_icon_number的重复项.知道我错过了什么吗?
因为在两个数据集中都有重复的合并列,所以您将获得k * m
具有该合并列值k
的行,其中是数据集1 m
中具有该值的行数,并且是数据集2中具有该值的行数.
尝试 drop_duplicates
dfa = df_A.drop_duplicates(subset=['my_icon_number']) dfb = df_B.drop_duplicates(subset=['my_icon_number']) new_df = pd.merge(dfa, dfb, how='inner', on='my_icon_number')
在这个例子中,唯一的共同点是,4
但我在每个数据集中有3次.这意味着我应该在生成的合并中获得总共9行,每个组合一行.
df_A = pd.DataFrame(dict(my_icon_number=[1, 2, 3, 4, 4, 4], other_column1=range(6))) df_B = pd.DataFrame(dict(my_icon_number=[4, 4, 4, 5, 6, 7], other_column2=range(6))) pd.merge(df_A, df_B, how='inner', on='my_icon_number') my_icon_number other_column1 other_column2 0 4 3 0 1 4 3 1 2 4 3 2 3 4 4 0 4 4 4 1 5 4 4 2 6 4 5 0 7 4 5 1 8 4 5 2