鱼C论坛

 找回密码
 立即注册
查看: 1248|回复: 7

求助Excel 表格中 删除数据重复 写法!

[复制链接]
发表于 2021-9-14 00:47:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

不管行还是列里面只要重复的数据都要删除,只留一个,网上搜了发现只有讲解单行单列的,不知道怎么具体怎么写。
求助大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-14 09:02:39 | 显示全部楼层
你的意思是可能一个数据在1行1列,一个在3行4列,只要重复也要删?怎么会有这么奇怪的需求?
建议所有数据提取做成字典,然后去判断值是否相等,相等则删除
当然如果数据量过于大,当我没说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-14 10:10:02 | 显示全部楼层
可以先放到列表里,然后根据 from collections import Counter 这个模块的函数,对列表查询出一个字典。
比如这样:
from collections import Counter
a = [1, 4, 2, 3, 2, 3, 4, 2]
b = Counter(a)  # 求数组中每个数字出现了几次
print(b)
结果:
Counter({2: 3, 4: 2, 3: 2, 1: 1})

然后根据得到的这个Counter 对象,可以取出每个值对应的重复次数,然后再对应保留删除?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-16 11:44:33 | 显示全部楼层


删除重复的数据后,单元格为空,看看是不是你想达到的效果:

参考代码:
import pandas as pd

df = pd.DataFrame(
    [[1, 2, 3, 1, 1],
     [3, 4, 5, 7, 5], 
     [1, 4, 3, 5, 1]])

for i in range(df.shape[0]):
    data = df.iloc[i, :]
    for l in df.iloc[i, :].unique():
        indexs = data[data.values == l].index
        for c in indexs[1:]:
            df.iloc[i, c] = None

for i in df.columns:
    data = df[i]
    for l in df[i].unique():
        indexs = data[data.values == l].index
        for r in indexs[1:]:
            df.iloc[r, i] = None

print(df)

输出效果:
     0    1    2    3   4
0  1.0  2.0  3.0  NaN NaN
1  3.0  4.0  5.0  7.0 NaN
2  NaN  NaN  NaN  5.0 NaN

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-16 16:53:09 | 显示全部楼层
列是字母A B C那种 ,不是数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-17 10:34:01 | 显示全部楼层
A秀秀 发表于 2021-9-16 16:53
列是字母A B C那种 ,不是数字




楼主没有 pandas 基础吧

上面代码是 df 举例子,自动读取行列索引,是不是数字、字母没有关系

如果你自己不会调,就把表结构发出来

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-17 14:18:43 | 显示全部楼层
开卷有益,学习学习····
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-17 14:54:55 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-17 14:56 编辑

我的代码(无导入模组/库):
def deleteDuplicates(arr: list[list]) -> list[list]:
    res = arr
    for row in res:
        for n, data in enumerate(row):
            if n:
                if data in row[:n]:
                    row[n] = None
    res = [list(col) for col in zip(*res)]

    for col in res:
        for n, data in enumerate(col):
            if n:
                if data in col[:n]:
                    col[n] = None

    res = [list(row) for row in zip(*res)]
    return res

arr = [
    [1, 2, 3, 1, 1],
    [3, 4, 5, 7, 5],
    [1, 4, 3, 5, 1]
]

res = deleteDuplicates(arr)

for row in res:
    for data in row:
        if data:
            print(f"{data:4} ", end = '')
        else:
            print(f"{None} ", end = '')
    print()
   1    2    3 None None 
   3    4    5    7 None 
None None None    5 None
是不是数字也没有影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 10:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表