我有两个数据框,每个数据框有一个列具有相同的值(和相等的长度)但是顺序不同,如简化示例;
df1=pd.DataFrame(['a','b','c','d','e'],columns=['names'])
df2=pd.DataFrame(['b','e','a','c','d'],columns=['names'])
我想知道df2中df1中每行的相应索引和do;
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长度。








原来是由于pandas merge默认为内连接,因此当您不特定方法时how,它只会在两个dfs中输出该行
例如 :
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