首页 > 解决方案 > 在python中使用不同的列名识别具有重复列值的列

问题描述

如何识别具有相同 column_value 的数据框中的列但是使用不同的列名,我们需要列出这两个列,这里我只能列出其中一个。

    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'])

数据视图

就像在图像中一样,可以观察到namename_dup具有相同的列值但列名不同使用下面的函数我只能name作为输出获得,如下所示name_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)

以上代码的输出如下所示:

实际输出

预期列表重复列输出

namename_dup ageage_dup

list_check如果我们有一个列名列表, 请在此处继续删除任何一列并重命名新列:

list_check  =  ['name','age']  

预期的数据框

预期产出

注意:它不是强制性的,它永远colnamecolname_dup它也可以是lname

标签: pythonpython-3.xpandasdataframeduplicates

解决方案


你的意思是:

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

推荐阅读