【问题标题】:pandas merged data lengthpandas 合并数据长度
【发布时间】:2019-06-17 16:34:54
【问题描述】:

我有两个数据框,每个数据框有一列具有相同的值(和相等的长度),但顺序不同,如简化示例中所示;

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.x pandas


    【解决方案1】:

    由于pandasmerge默认是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
    

    【讨论】:

    • 谢谢 W-B,但我在两个数据框中都有相同的值,它们只是顺序不同。
    • @kutlus 在你有重复键后,它会合并相同的键两次
    • 抱歉,没有,因为在我的数据中 df1 和 df2 的长度相等。我无法理解的问题是为什么合并数据的长度小于 len(df1) 或 len(df2)。也许我在您的解决方案中遗漏了一些东西。但是您的评论仍然有帮助,我为您投票,谢谢
    • @kutlus 让我们运行df1.names.isin(df2.names.tolist()).all() 这是返回 False 吗?
    • 我确实运行了它,它说“假”。我猜两个数据帧中的某些值是不同的,即使它们应该t be, so I didnt 认为这就是原因。这解决了我的问题,非常感谢
    猜你喜欢
    • 2019-03-08
    • 2017-04-23
    • 2012-12-15
    • 2021-05-27
    • 2020-06-28
    • 2021-11-30
    • 1970-01-01
    • 2017-07-10
    • 2016-09-07
    相关资源
    最近更新 更多