我正在Jupyter笔记本上使用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
如下: id my_icon_number
-----------------------------
A1 123
B1 234
C1 123
D1 235
E1 235
F1 400
我的
df_A
是这样的:my_icon_number color size
-------------------------------------
123 blue small
234 red large
235 yellow medium
那么,我希望
df_B
是: 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中的_icon_编号的副本。知道我在这里遗漏了什么吗?
最佳答案
因为两个数据集中都有合并列的重复项,所以将得到具有该合并列值的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
关于python - pandas:merged(内连接)数据框的行数多于原始数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41580249/