在python

时间:2019-12-16 07:54:36

标签: python python-3.x pandas dataframe duplicates

如何用相同的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'])

Data View

就像在图像中一样,可以观察到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)

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

Actual Output

期望列表重复列输出

namename_dup ageage_dup

在这里,如果我们有列名列表,则继续删除列中的任何一列,并从list_check重命名新列:

list_check  =  ['name','age']  

期望的数据框架

Expected Output

注意:并非强制要求始终为colname,始终为colname_dup,也可以为lname

2 个答案:

答案 0 :(得分:2)

您的意思是:

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

答案 1 :(得分:1)

您可以尝试以下方法:

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