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