繁体   English   中英

比较两个数据框的列?

[英]Comparing the columns of two data frames?

我有两个数据框如下:

  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]。
任何想法来处理这个问题?

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

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 中的预期列数,您可以将其作为参数发送。 如果您确定 df1 中的每个 col 在 df2 中只有 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 条件的顶部创建一个循环。

常用栏目:

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

要获取 df2 中存在的 df1 列:

df1[common]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM