python - 在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'])
就像在图像中一样,可以观察到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
。
解决方案
你的意思是:
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
推荐阅读
- javascript - How to access and sort keys in nested objects in Javascript?
- sql - SQL ,将所有数字格式化为 2 位小数(例如 20 到 20.00)
- rethinkdb - 让 RethinkDB 查询在 Ruby on Rails 中工作
- javascript - 使用 React 和 CSS 关闭屏幕时淡出动画
- node.js - React-Native to NodeJS Server - 将客户端流(视频)从 React 发送到 NodeJS 服务器,然后再次发送回客户端
- java - JAXB ordering multiple properties
- grammar - 这种从 BNF 到 EBNF 的转换是否正确?
- wordpress - Wordpress 媒体上传定义默认元值
- c# - 如何在容器中注册类型,但在子容器中解析?
- flutter - Flutter 中带有容器小部件的 If 语句