大熊猫合并数据长度

时间:2019-01-24 01:39:12

标签: python-3.x pandas

我有两个数据帧,每一帧都有一列,它们的值相同(且长度相等),但顺序与简化示例中的顺序不同;

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的长度。

1 个答案:

答案 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
相关问题