Python 小白又来求助啦,有关 excel 条件去重的问题。求大佬解答。

2020-12-25 11:20:51 +08:00
 kevinfk2
现在有一个 excel 表格,如图 https://imgur.com/DhZDVZK

需求:

A 列出现了重复的数据,需要去除重复的行。

需要根据 date2 这列数据判断,保留日期比较新的一行。

如果 date2 数据为空,要根据 date1 数据判断,保留日期比较新的一行。

最后将去重的表格保存到原 excel 的新 sheet


目前状况:

我只会根据一列去重。代码如下
# -*- coding: utf-8 -*-
from __future__ import print_function

import pandas as pd

# 读取 Excel 中 Sheet1 中的数据
data = pd.DataFrame(pd.read_excel(r'C:\Users\140082\Desktop\去重测试.xlsx', 'Sheet1'))

# 查看基于[name]列去除重复行的数据
wp = data.drop_duplicates(['name'])
print(wp)

请问我要怎么完成需求啊,大佬求解答!
1858 次点击
所在节点    Python
9 条回复
krixaar
2020-12-25 11:38:08 +08:00
这种小事不用 Python,Excel 里新建一辅助列,内容是如果 date2 为空则为 date1 否则 date2 (=if(isblank 或者 len=0 自己按需挑, C2, D2)),date3 降序,数据--删除重复值--A 列,确定,删掉辅助列。
删除重复值会保留最上面的行,所以降序排列后剩下的就是最新行。
非得用 Python 或者 SQL 思路同上。
lpts007
2020-12-25 11:41:16 +08:00
sort by date2, date1
drop keep=last
kevinfk2
2020-12-25 11:44:43 +08:00
@krixaar 要处理的数据表太多了,非常卡,所以想用 python 做
kevinfk2
2020-12-25 11:51:02 +08:00
@lpts007 不太理解
factoid
2020-12-25 12:46:36 +08:00
@lpts007 厉害了,我只能想到用 apply 先去构建布尔值,然后取值
factoid
2020-12-25 12:49:24 +08:00
@kevinfk2 他的意思是先按照 date2,date1 排序,有个 df.sortxxxxx 啥的函数,然后 drop_duplicates([‘name’],keep=last)
wysnylc
2020-12-25 14:22:23 +08:00
你以为 python 能有多高性能啊,都是单线程谁也别瞧不起谁
我站 excel
TEwrc
2020-12-25 15:31:23 +08:00
写了半天好像对了:

import csv
from itertools import tee, takewhile, islice

result = []
with open('test.csv', 'r') as f:
info1, info2, info3 = tee(islice(csv.reader(f), 1, None), 3)
sorted_by_date1 = sorted(info1, key=lambda x: x[2], reverse=True)
sorted_by_date2 = takewhile(lambda x: x[3], sorted(info2, key=lambda x: x[3], reverse=True))
for j in sorted_by_date2:
if j[0] not in [i[0] for i in result]:
result.append(j)
for k in sorted_by_date1:
if k[0] not in [i[0] for i in result]:
result.append(k)
print(result)
kevinfk2
2020-12-25 15:53:25 +08:00
@TEwrc 辛苦大佬了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/738833

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX