在python中识别具有不同列名的重复列值的列

在python中识别具有不同列名的重复列值的列,python,python-3.x,pandas,dataframe,duplicates,Python,Python 3.x,Pandas,Dataframe,Duplicates,如何识别数据帧中具有相同列_值但具有不同列名的列,我们需要列出这两个列,在这里我只能列出其中一个 from pandas import DataFrame import numpy as np import pandas as pd raw_data = { 'id': ['1', '2', '2', '3', '3'], 'name': ['A', 'B', 'B', 'C', 'D'], 'age' : [1, 2,

如何识别数据帧中具有相同列_值但具有不同列名的列,我们需要列出这两个列,在这里我只能列出其中一个

    from pandas import DataFrame
    import numpy as np
    import pandas as pd

raw_data = {
        'id': ['1', '2', '2', '3', '3'],
        'name': ['A', 'B', 'B', 'C', 'D'],
        'age' : [1, 2, 2, 3, 3],
'name_dup': ['A', 'B', 'B', 'C', 'D'],
'age_dup': [1, 2, 2, 3, 3]}
df = pd.DataFrame(raw_data, columns = ['id', 'name','age','name_dup','age_dup'])

与图中一样,可以观察到
name
name\u dup
具有相同的列值,但列名与下面的函数不同,我只能获得
name
作为输出,如下所示,其中预期的是
name\u dup

    def duplicate_columns(frame):
    groups = frame.columns.to_series().groupby(frame.dtypes).groups
    dups = []

    for t, v in groups.items():

        cs = frame[v].columns
        vs = frame[v]
        lcs = len(cs)

        for i in range(lcs):
            iv = vs.iloc[:,i].tolist()
            for j in range(i+1, lcs):
                jv = vs.iloc[:,j].tolist()
                if iv == jv:
                    dups.append(cs[i])
                    break

    return dups 

 duplicate_columns(df)
以上代码的输出如下图所示:

预期列表重复列输出

name
name\u dup
age
age\u dup

在此,如果我们有列名列表,请继续删除列中的任何一个,并从
list\u check
中重命名新列:

list_check  =  ['name','age']  
预期数据帧

注意:它不一定总是
colname
将是
colname\u dup
它也可以是
lname

你的意思是:

s = df.T.duplicated().reset_index()
vals = s.loc[s[0], 'index'].tolist()
colk = df.columns.drop(vals)
print(vals)
print(colk)
print(df.drop(vals, axis=1))
输出:

['name_dup', 'age_dup']
['id', 'name', 'age']
  id name  age
0  1    A    1
1  2    B    2
2  2    B    2
3  3    C    3
4  3    D    3
你是说:

s = df.T.duplicated().reset_index()
vals = s.loc[s[0], 'index'].tolist()
colk = df.columns.drop(vals)
print(vals)
print(colk)
print(df.drop(vals, axis=1))
输出:

['name_dup', 'age_dup']
['id', 'name', 'age']
  id name  age
0  1    A    1
1  2    B    2
2  2    B    2
3  3    C    3
4  3    D    3
您可以尝试以下方法:

df.T.drop_duplicates().T
输出:

  id name age
0  1    A   1
1  2    B   2
2  2    B   2
3  3    C   3
4  3    D   3
您可以尝试以下方法:

df.T.drop_duplicates().T
输出:

  id name age
0  1    A   1
1  2    B   2
2  2    B   2
3  3    C   3
4  3    D   3

我看不到代码中的
age\u dup
列我看不到代码中的
age\u dup
列这是最终结果,但命名应符合
list\u check
我们还需要一个列表,列出所有具有公共列值的列是这是最终结果,但命名应符合
list\u check
我们还需要一个列表,列出所有具有公共列值的列预期VAL为['name','name\u dup','age','age\u dup']@NabiShaikh这不是您想要的吗?数据帧输出非常完美,但是我也想知道另一个列名,因为从这段代码中我知道,
name
是重复的列,但是如果在其他列中是名称,比如说'colk',那么这将是一个很好的信息。有人用不同的列名命名了一个类似的内容列值,这是
colk
@NabiShaikh Edited更好?当您的数据集没有很小的列时,这很好理解,但是如果有超过100列,如果我想标识name_dup和name具有相同的列值,但列名不同,那么这很好理解。那样的话,就很难理解了。我们可以通过任何方式列出不同的列,例如name和name_dup具有相同的列值。更精确一些。预期的VAL是['name','name_dup','age','age_dup']@NabiShaikh这不是你想要的吗?数据帧输出非常完美,但是我也想知道另一个列名,因为从这段代码中我知道,
name
是重复的列,但是如果在其他列中是名称,比如说'colk',那么这将是一个很好的信息。有人用不同的列名命名了一个类似的内容列值,这是
colk
@NabiShaikh Edited更好?当您的数据集没有很小的列时,这很好理解,但是如果有超过100列,如果我想标识name_dup和name具有相同的列值,但列名不同,那么这很好理解。那样的话,就很难理解了。我们可以通过任何方式列出不同的列,例如name和name_dup具有相同的列值。更确切地说。。