首页 > 解决方案 > 如果两列中的连续值相同,如何在python中删除重复项?

问题描述

我有一个如下的数据框:

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 也相同,我想删除在连续出现中保留第一个值的重复项。EG在这里出现'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

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

代码:

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]))

这个组返回给我一个系列,但我想放弃。

标签: pythonpandasdataframe

解决方案


添加DataFrame.drop_duplicates2 列:

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

或者用|for bitwise链接这两个条件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

推荐阅读