GVKun编程网logo

基于2列同时删除python中数据集中的重复项(python两列表删除重复项)

4

在本文中,我们将详细介绍基于2列同时删除python中数据集中的重复项的各个方面,并为您提供关于python两列表删除重复项的相关解答,同时,我们也将为您带来关于Leetcode26.删除排序数组中的

在本文中,我们将详细介绍基于2列同时删除python中数据集中的重复项的各个方面,并为您提供关于python两列表删除重复项的相关解答,同时,我们也将为您带来关于Leetcode 26.删除排序数组中的重复项 By Python、Leetcode 80.删除排序数组中的重复项 II By Python、Pythom-删除列表中的重复项、python – Pandas:枚举索引中的重复项的有用知识。

本文目录一览:

基于2列同时删除python中数据集中的重复项(python两列表删除重复项)

基于2列同时删除python中数据集中的重复项(python两列表删除重复项)

如何解决基于2列同时删除python中数据集中的重复项?

我有一个 Pandas 数据框,希望根据 2 个特定列的条目是否重复来删除行,从第一行开始向下进行(保留第一个命中并删除其他重复项)。

例如从:

Group_1 Group_2 分数
红色 蓝色 90
红色 橙色 85
红色 紫罗兰 82
绿色 蓝色 79
绿色 黄色 74

并且有一个所有条目都是唯一的输出(同时考虑两列 - 第四行被删除,因为第二列中的“蓝色”已经存在于第一行中):

Group_1 Group_2 得分
红色 蓝色 90
绿色 黄色 74

解决方法

我不知道以 col1 OR col2 方式而不是 AND 方式删除重复项的任何直接方法,但是您可以简单地使用 for 循环来按顺序删除您想要的列上的重复项。

for col in [''Group_1'',''Group_2'']:
    df.drop_duplicates(subset=col,inplace=True)

for col in df.columns[:2]:
    df.drop_duplicates(subset=col,inplace=True)

它还会自动保留第一次出现,但您可以在方法中指定它: df.drop_duplicates(subset=col,inplace=True,keep=''first'')

Leetcode 26.删除排序数组中的重复项 By Python

Leetcode 26.删除排序数组中的重复项 By Python

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例 1:

给定数组 nums = [1,1,2], 

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 

你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以**“引用”**方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}
思路

设立2个指针i,j。跑得快的指针j会在遇到不是重复的元素的时候停下来,此时i+1进行赋值。如此遍历即可。

Code
class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        i = 0
        j = 0
        while j < len(nums)-1:
            if nums[j] == nums[j+1]:
                j += 1
            else:
                i += 1
                nums[i] = nums[j+1]
                j += 1
        return len(set(nums))    #去重后返回长度

Leetcode 80.删除排序数组中的重复项 II By Python

Leetcode 80.删除排序数组中的重复项 II By Python

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例 1:

给定 nums = [1,1,1,2,2,3],

函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。

你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,0,1,1,1,1,2,3,3],

函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。

你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以**“引用”**方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

思路

用了一个较为笨拙的方法:

利用$collections.Counter$类来计算每个数字出现的次数,再将其中大于2的赋值为2,最后还原为list就好了

代码

class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        d = collections.Counter(nums)
        for key,value in d.items():
            if value > 2:
                d[key] = 2
        nums[:] = sorted(d.elements())
        return len(nums)        

虽然可以过,但是效率不高,看到最好的代码是

class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        i = 0
        for e in nums:
            if i < 2 or e != nums[i-2]:
                nums[i] = e
                i += 1
        
        return i

Pythom-删除列表中的重复项

Pythom-删除列表中的重复项

编写一个程序来检查列表中是否有重复项,如果删除了重复项,则将其删除,并返回一个包含未重复项/已删除项的新列表。这就是我所拥有的,但老实说我不知道​​该怎么办。

def remove_duplicates():    t = [''a'', ''b'', ''c'', ''d'']    t2 = [''a'', ''c'', ''d'']    for t in t2:        t.append(t.remove())    return t

答案1

小编典典

获取唯一项目集合的常用方法是使用set。集是不同对象的无序集合。要从任何迭代创建集合,只需将其传递给内置函数即可。如果以后再次需要真实列表,则可以类似地将集合传递给函数。set()list()

以下示例应涵盖你尝试做的所有事情:

>>> t = [1, 2, 3, 1, 2, 5, 6, 7, 8]>>> t[1, 2, 3, 1, 2, 5, 6, 7, 8]>>> list(set(t))[1, 2, 3, 5, 6, 7, 8]>>> s = [1, 2, 3]>>> list(set(t) - set(s))[8, 5, 6, 7]

从示例结果中可以看出,原始订单未得到维护。如上所述,集合本身是无序集合,因此顺序丢失。将集合转换回列表时,将创建任意顺序。

维持秩序

如果订单对你很重要,那么你将不得不使用其他机制。一个非常常见的解决方案是OrderedDict在插入期间依靠保持键的顺序:

>>> from collections import OrderedDict>>> list(OrderedDict.fromkeys(t))[1, 2, 3, 5, 6, 7, 8]

从Python 3.7开始,可以确保内置字典也保持插入顺序,因此,如果你使用的是Python 3.7或更高版本(或CPython 3.6),也可以直接使用它:

>>> list(dict.fromkeys(t))[1, 2, 3, 5, 6, 7, 8]

请注意,这可能会产生一些开销,先创建字典,然后再从中创建列表。如果你实际上不需要保留订单,那么通常最好使用一组,特别是因为它可以为你提供更多操作。请查看此问题,以获取更多详细信息以及删除重复项时保留订单的其他方法。

最后请注意,解决方案setOrderedDict/ dict解决方案都要求你的项目是可哈希的。这通常意味着它们必须是不变的。如果必须处理不可散列的项目(例如列表对象),则必须使用慢速方法,在这种方法中,你基本上必须将每个项目与嵌套循环中的所有其他项目进行比较。

python – Pandas:枚举索引中的重复项

python – Pandas:枚举索引中的重复项

假设我有一个在不同键上发生的事件列表.

data = [
    {"key": "A","event": "created"},{"key": "A","event": "updated"},{"key": "B",{"key": "C",]

df = pandas.DataFrame(data)

我想首先在键上索引我的DataFrame,然后是枚举.它看起来像一个简单的unstack操作,但我无法找到如何正确地执行它.

我能做的最好的是

df.set_index("key",append=True).swaplevel(0,1)

          event
key            
A   0   created
    1   updated
    2   updated
    3   updated
B   4   created
    5   updated
    6   updated
C   7   created
    8   updated
    9   updated
    10  updated
    11  updated
    12  updated

但我期待的是

event
key            
A   0   created
    1   updated
    2   updated
    3   updated
B   0   created
    1   updated
    2   updated
C   0   created
    1   updated
    2   updated
    3   updated
    4   updated
    5   updated

我也尝试了类似的东西

df.groupby("key")["key"].count().apply(range).apply(pandas.Series).stack()

但订单未保留,因此我无法将结果应用为索引.此外,我觉得看起来非常标准的操作有点过分了……

任何的想法?

解决方法

groupby cumcount

以下是几种方法:

# new version thanks @ScottBoston
df = df.set_index(['key',df.groupby('key').cumcount()])\
       .rename_axis(['key','count'])

# original version
df = df.assign(count=df.groupby('key').cumcount())\
       .set_index(['key','count'])

print(df)

             event
key count         
A   0      created
    1      updated
    2      updated
    3      updated
B   0      created
    1      updated
    2      updated
C   0      created
    1      updated
    2      updated
    3      updated
    4      updated
    5      updated

今天关于基于2列同时删除python中数据集中的重复项python两列表删除重复项的介绍到此结束,谢谢您的阅读,有关Leetcode 26.删除排序数组中的重复项 By Python、Leetcode 80.删除排序数组中的重复项 II By Python、Pythom-删除列表中的重复项、python – Pandas:枚举索引中的重复项等更多相关知识的信息可以在本站进行查询。

本文标签: