我有一个包含17列(A列到S列)的excel工作表。A列包含ID号,C列是日期列,F列包含时间格式的值(hh: mm)。对于同一个日期/天,一些ID号在F列中包含两个值-通常是一个高数字(多小时和分钟)和一个低数字(几分钟)。如果有这样的重复,我希望从工作表中删除包含F列中低值的整行。
我尝试了Excel的“板载”删除重复项功能,但没有成功。然后我遇到了这段VBA代码,它删除了包含最高值的整个重复行:
Option Explicit
Sub RemoveDuplicatesKeepMin()
Dim r As Integer, r2 As Integer, i As Integer
Dim rng As Range
Dim NextVal As Double
r = Range("A" & Rows.Count).End(xlUp).Row
Set rng = Range("A2:C" & r)
rng.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
r2 = 2
For i = 2 To r
If Not NextVal = Range("A" & i) Then
Range(Cells(i, 1), Cells(i, 2)).Copy Destination:=Range("D" & r2)
r2 = r2 + 1
NextVal = Range("A" & i + 1)
End If
Next
rng.Delete Shift:=xlShiftToLeft
Set rng = Nothing
End Sub
我不完全确定我是否理解这背后的逻辑,但我猜这可以作为一个起点(颠倒逻辑并添加新的限制(如果在同一天)。如果我将顺序从升序更改为降序,则需要取最高值。但我不确定如何设置额外的限制(日限制)。
谢谢!
这里,我对您的问题的方法:
Public Sub deleteDuplicate()
Dim row As Integer
'Set the start row
row = 2
With Sheets("sheetname")
'Loop until ID cell is blank
Do While .Range("A" & row) <> ""
innerRow = 1
'Re-loop until ID cell is blank for checking
Do While .Range("A" & innerRow) <> ""
'If ID and date are equal
If row <> innerRow And .Range("A" & row) = .Range("A" & innerRow) And .Range("C" & row) = .Range("C" & innerRow) Then
If .Range("F" & row) < .Range("F" & innerRow) Then
.Rows(row).Delete
row = row - 1
Exit Do
Else
.Rows(innerRow).Delete
End If
End If
'Increase inner looping row
innerRow = innerRow + 1
Loop
'Increase row
row = row + 1
Loop
End With
End Sub
我有一个数据帧,在a列中有重复值。我想删除重复值,保留b列中值最高的行。 所以这个: 应该变成这个: 我猜可能有一种简单的方法可以做到这一点——可能就像在删除重复项之前对数据帧进行排序一样简单——但我对groupby的内部逻辑了解不够,无法搞清楚。有什么建议吗?
我有一个简单的数据库表 我想删除所有按fv和sv分组的重复行。这已经是一个相当流行的问题,有很好的答案。但我需要改变这种情况。当rel\u id为NULL时,我想保留该行。在任何其他情况下,任何事情都会发生。 所以通过使用以下值 任何一个 或 将是有效的结果。其中为 不会。因为第一个条目有作为,它在之上担任主席。 我目前有这个(这是关于基本重复问题的答案)作为删除重复项的查询,但我不确定如何继续修
问题内容: 我必须清理具有重复行的表: 一个可能具有多个值: 我想对整个表执行一个查询,并删除和重复的所有行。在上面的示例中,删除后,我只想剩下1、2、4和5。 问题答案: ;WITH x AS ( SELECT id, gid, url, rn = ROW_NUMBER() OVER (PARTITION BY gid, url ORDER BY id) FROM dbo.table ) SEL
但是它并不像预期的那样工作,因为它将删除所有重复的行。 我想这样做的原因是与另一个数据集联接,而不是在同一个键组有多个名称时从该数据集添加信息
假设我有以下数据帧: 我想删除基于列A、B和C的重复项,保留列E最高的行。如果E列中的值相同,则保留D列最高的行。 所以上面的数据帧会变成: 我在那里看到了答案的开头:python熊猫:按列A删除重复项,保留列B中值最高的行,但不幸的是,我无法找到如何处理如果列E中的值相同,则保留列D中的最高值:/ (我正在一个相当大的数据集上运行此代码) 任何帮助赞赏!
如何删除重复行,但保留所有行的最大值。例如,我有一个包含4行的数据帧: 从这个数据帧中,我想有一个这样的数据帧(3行,按'a'分组,保留所有在'c'中有最大值的行):