比较两个数据框的列?

时间:2020-10-01 09:50:38

标签: python arrays dataframe indexing comparison

我有两个数据帧,如下所示:

  df1:
            id,   f1,   f2,..., f800
            0,     5,  5.6,..,  3,7
            1,   2.4,  1.6,..,  1,7
            2,     3,  2.3,..,  4,4
            ....
            n,   4.7,  9,3,..., 8,2

 df2:
            id,   v1,   v2,..., v200
            0,     5,  5.6,..,  5,7
            1,   2.4,  1.6,..,  6,7
            2,     3,  2.3,..,  4,2
            ....
            n,   4.7,  9,3,..., 3,1

df1包含800个功能,而df2仅包含200个功能。第二数据帧(df2)是第一数据帧(df1)的一部分。现在,我想查找包含df2列/变量的列的位置(在df1中)。在这里,列的值应该相似,而不是列的名称。考虑到上面的示例,我想要的输出应该是“ f1和f2”或df1的列[0,1]。
有解决这个问题的主意吗?

3 个答案:

答案 0 :(得分:1)

我会合并两个数据帧,所以我确定只有相同的索引存在

result = pd.concat([df1, df2], axis=1, join='inner')

然后您可以使用以下代码:

import pandas as pd 
  
def getDuplicateColumns(df): 
    duplicateColumnNames = set() 
    
    for x in range(df.shape[1]-200): 
        col = df.iloc[:, x] 
          
        for y in range(df.shape[1]-200, df.shape[1]):  
            otherCol = df.iloc[:, y] 
            #if the columns are equal mark it down  
            if col.equals(otherCol): 
                duplicateColumnNames.add(df.columns.values[y]) 
                #here you can mark down both names, so you map them
    return list(duplicateColumnNames) 

cols = getDuplicateColumns(result)

,然后您可以对返回的选定列进行任何操作,即删除冗余列。 200是第二个df中的预期cols数量,您可以改为将其作为参数发送。如果您确定df1中的每个col在df2中只有1个匹配项,那么您也可以在找到匹配项后中断内部循环。

答案 1 :(得分:1)

您需要将此问题分解为一部分 一个是找到共同的特征

df1 = pd.DataFrame([[0,1,2,11],[3,4,5,12],[6,7,8,13]], columns=['A','B','C','D'])
df2 = pd.DataFrame([[1,2,11],[4,5,12],[7,8,14]], columns=['a','b','D']) 
common = set(df1.columns) & set(df2.columns)

另一个正在检查天气,这两列是否相似

if(df1[common].equals(df2[common])): 
     print(df1[common])
else:
     print("Nothing common")

要检查多列,您可以在if条件的顶部创建一个循环。

答案 2 :(得分:-1)

常用列:

common = set(df1.columns) & set(df2.columns)

要获取df2中存在的df1列:

df1[common]