如何用相同的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'])
就像在图像中一样,可以观察到name
和name_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)
以上代码的输出如下所示:
期望列表重复列输出
name
和name_dup
age
和age_dup
。
在这里,如果我们有列名列表,则继续删除列中的任何一列,并从list_check
重命名新列:
list_check = ['name','age']
期望的数据框架
注意:并非强制要求始终为colname
,始终为colname_dup
,也可以为lname
。
答案 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