Skip to main content
 首页 » 编程设计

python之如果两列中的连续值相同,如何在 python 中删除重复项

2025年05月04日19EasonJim

我有一个如下所示的数据框:

A   B   C 
1   8   23 
2   8   22 
3   9   45 
4   9   45 
5   6   12 
6   4   10 
7   11  12 

如果 C 也相同,我想在保留连续出现的第一个值的地方删除重复项。 例如,此处出现“9”的 B 列是重复的,它们在“C”列中的相应出现也是重复的“45”。在这种情况下,我想保留第一次出现。

预期输出:

A   B   C 
1   8   23 
2   8   22 
3   9   45 
5   6   12 
6   4   10 
7   11  12 

我尝试了一些 group by,但不知道如何删除。

代码:

df['consecutive'] = (df['B'] != df['B'].shift(1)).cumsum() 
test=df.groupby('consecutive',as_index=False).apply(lambda x: (x['B'].head(1),x.shape[0], 
                                                       x['C'].iloc[-1] - x['C'].iloc[0])) 

这个分组返回给我一个系列,但我想删除。

请您参考如下方法:

添加DataFrame.drop_duplicates按 2 列:

df['consecutive'] = (df['B'] != df['B'].shift(1)).cumsum() 
df = df.drop_duplicates(['consecutive','C']) 
print (df) 
   A   B   C  consecutive 
0  1   8  23            1 
1  2   8  22            1 
2  3   9  45            2 
4  5   6  12            3 
5  6   4  10            4 
6  7  11  12            5 

或者将两个条件与 | 链接起来进行按位 OR:

df = df[(df['B'] != df['B'].shift()) | (df['C'] != df['C'].shift())] 
print (df) 
   A   B   C 
0  1   8  23 
1  2   8  22 
2  3   9  45 
4  5   6  12 
5  6   4  10 
6  7  11  12