Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫在不同的群体中丢弃重复的动物_Python_Pandas_Duplicates - Fatal编程技术网

Python 熊猫在不同的群体中丢弃重复的动物

Python 熊猫在不同的群体中丢弃重复的动物,python,pandas,duplicates,Python,Pandas,Duplicates,我有一个数据帧,在这个数据帧中,我只希望跨组删除重复项,并且只删除一次 A B C D 01 02第1组 1第2组 第2组 3 1第2组 43832组 5 1组1 在上述数据帧中,我希望得到以下输出: A B C D 01 02第1组 第2组 3 1第2组 43832组 对于每个跨组匹配(跨组1和2),如果存在配对匹配,则将其删除。注意:如果存在重复的配对匹配,只要组间存在配对,两个匹配都将被删除 为清晰起见,附加示例: A B C D 01 02第1组 1第2组 第2组 3 1第2组 43

我有一个数据帧,在这个数据帧中,我只希望跨组删除重复项,并且只删除一次

A B C D
01 02第1组
1第2组
第2组
3 1第2组
43832组
5 1组1
在上述数据帧中,我希望得到以下输出:

A B C D
01 02第1组
第2组
3 1第2组
43832组
对于每个跨组匹配(跨组1和2),如果存在配对匹配,则将其删除。注意:如果存在重复的配对匹配,只要组间存在配对,两个匹配都将被删除

为清晰起见,附加示例:

A B C D
01 02第1组
1第2组
第2组
3 1第2组
43832组
5 1组1
6第1组
在上述数据帧中,我希望得到以下输出:

A B C D
01 02第1组
3 1第2组
43832组
非常感谢您的帮助

首先在子集上选择重复的行,在这里:['A'、'B'、'C']并另存为df1。然后groupby这个新的数据帧由您的组组成,这里是col'D'。 现在,为每个组找到第一行的索引。索引与主数据帧df相同。因此,您可以轻松地逐行删除索引值


输出中带有
1
的行不应该属于组1吗?是的,索引1和5被删除。索引1来自第2组,而索引5来自第1组。为什么不删除索引3?对不起,这有点混乱。我想在不同的组之间删除对。因此,尽管有4个“匹配”(索引1、2、3、5),但各组之间只有1个匹配。(我选择从第2组中删除索引1,但是第2组中的任何一个匹配都可能被删除)好的,谢谢你的澄清!我现在明白了。但我不知道如何轻松地做到这一点,除了检查每个小组。我有一种感觉,你可能想做错事,因为如果你只放弃一次,你仍然可以在不同的群体中留下重复的,所以我不明白为什么放弃是有用的。你能说出你的最终目标吗?也许有更简单的方法?谢谢你,纳扎宁。这里有一些内容,但这段代码只删除数据帧中的第一个成对值。我正在探索您提供的上述内容。欢迎光临!我认为它应该在每组中删除一个重复的行。有点困惑:)我更新了代码。它将重复的行分组,然后找到具有最小长度的组,并将长度保存为“最小重复行”,然后在每个组中删除“最小重复行”。
import pandas as pd
data = {'A' : [1,1,1,1,3,1,1], 
        'B' : [0,1,1,1,8,1,1],
        'C' : [2,1,1,1,3,1,1],
        'D' : ['Group 1','Group 2','Group 2','Group 2','Group 2','Group 1','Group 1']}
df = pd.DataFrame(data)

df1 = df[df.duplicated(['A','B','C'],keep=False)]
df2 = df1.groupby('D')
min_duplicate_rows = df2.A.count().min()

for group, data_list in df2:
    for i in range(min_duplicate_rows):
        drop_index = (data_list.index)[i]
        df = df.drop(drop_index)
df