首页 > 解决方案 > 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 长度。

标签: python-3.xpandas

解决方案


由于pandas merge默认是inner join,当你不指定方法时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

推荐阅读