我有两个数据帧,每一帧都有一列,它们的值相同(且长度相等),但顺序与简化示例中的顺序不同;
df1=pd.DataFrame(['a','b','c','d','e'],columns=['names'])
df2=pd.DataFrame(['b','e','a','c','d'],columns=['names'])
我想知道df2中df1中每一行的对应索引并这样做;
df= pd.merge(df1.reset_index(), df2.reset_index(), on=['names'])
这可以正常工作,并且正如本示例所预期的那样,数据帧的长度等于len(df1)=len(df2)=len(df)
但是在我的真实数据中,len(df1)= len(df2)= 1714和len(df)= 1676
我很困惑,这怎么可能?
我刚刚做了一个实验并添加了重复项。
df1=pd.DataFrame(['e','a','b','c','d','e'],columns=['names'])
df2=pd.DataFrame(['b','e','a','e','c','d'],columns=['names'])
df= pd.merge(df1.reset_index(), df2.reset_index(), on=['names'])
这使len(df)= 8大于len(df1)= len(df2)= 6。
但是在我的真实数据中,df小于各个df的长度。
答案 0 :(得分:2)
由于pandas
merge
的默认设置是内部联接,因此当您不指定how
的方法时,它将仅将行输出为两个df
例如:
df1=pd.DataFrame(['a'],columns=['names'])
df2=pd.DataFrame(['b','e','a','c','d'],columns=['names'])
pd.merge(df1.reset_index(), df2.reset_index(), on=['names'])
index_x names index_y
0 0 a 2
更新
df1=pd.DataFrame(['a','a'],columns=['names'])
df2=pd.DataFrame(['b','e','a','a','c','d'],columns=['names'])
df1.merge(df2)
names
0 a
1 a
2 a
3 a