【问题标题】:Compare multiple columns across different dataframes | Pandas比较不同数据框的多列 |熊猫
【发布时间】:2021-10-08 06:38:48
【问题描述】:

我有两个具有相同列的数据框。我想生成一个新的 df ,其中数据框中的列之间的数据不同。 像这样: 注意,我已经做了一些预处理:

  • df1 中的所有 id 都存在于 df2 中; df2 中的所有 id 都存在于 df1
  • 没有 NA/NAN 值。
  • 所有单元格都是字符串,最小长度为 1,最大长度为 3500。
  • 需要比较的列的名称存储在一个列表中。

我不确定如何获取这些细粒度信息,我尝试过遍历每一列并生成一个数据框。 像这样:

for v in col_list:
    m_df = pd.merge(df1, df2, on = ['id',v], how = 'outer', indicator=True]).('_merge != "both"')

但是,我不确定如何将这些数据框组合成一个数据框。

此解决方案可以很好地解决我的问题,但我不知道如何根据需要对其进行转换: https://stackoverflow.com/a/47112033/7987118

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    只要df==df2

    # module
    
    import pandas as pd
    import numpy as np
    
    d=[['v1', 'v3', 'v56', 'sstr'],
    ['v2', 'v4', 'v34', 'sstr'],
    ['v3', 'v5', 'v12', ''],
    ['v4', 'v6', 'v-10', 'sstr'],
    ['v5', 'v7', 'v-32', 'sstr']]
    
    d2=[['v1', 'v3', 'v56', 'sstr'],
    ['v234', 'v4adf', 'v34', 'sstr'],
    ['v3', 'v5asd', 'v12', 'sstr'],
    ['v4', 'v6', 'asdfasdf', 'sstr'],
    ['v5', 'v7', 'v-32', 'sstr']]
    
    
    # datasets
    
    
    df=pd.DataFrame(d,columns='a b c d'.split())
    df2=pd.DataFrame(d2,columns='a b c d'.split())
    print(df)
    print(df2)
    
    #check
    
    print(df==df2)
    #       a      b      c      d
    #0   True   True   True   True
    #1  False  False   True   True
    #2   True  False   True  False
    #3   True   True  False   True
    #4   True   True   True   True
    

    【讨论】:

    • 两个 dfs 之间的列名相同,我收到此错误:/venv_2/lib64/python3.7/site-packages/pandas/core/ops/__init__.py",第 511 行,在 _align_method_FRAME “只能比较标记相同的 DataFrame 对象” ValueError: Can only compare相同标记的 DataFrame 对象。
    • @Harsha 您是否检查了 2 个 dfs 中的列顺序并使用 .info() 方法?
    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多