首页 > 解决方案 > python - 如何使用python在pandas数据框中的第一个连续重复值后删除?

问题描述

我有一个数据框

df=pd.DataFrame(['a','a','a','b','b','b','c','d','d','a','a' ,'b','b','e','f','d','d'])。

在这第一个连续的'a','b'和'd'值中我想保留。之后,如果出现任何重复值意味着我想删除它。

所以,现在我的预期输出是

['a','a','a','b','b','b','c','d','d','e','f']。

如果我使用

打印(df.drop_duplicates())

它删除所有重复的值。那么,如何获得我的预期输出?提前致谢。

标签: python-3.xpandas

解决方案


将每个值与其前一个值进行比较以找到每次运行的开始:

df['start'] = df[0] != df[0].shift()

对于每个组,使用cumsum查找值的累积总和start(利用 Pandas 将 True 视为 1 和 False 视为 0 的事实)。累积和可以作为一个组数:

df['group'] = df.groupby(0)['start'].cumsum()

然后选择第一组中的所有行(即第一次运行的值):

result = df.loc[df['group'] == 1]

import pandas as pd

df = pd.DataFrame(['a','a','a','b','b','b','c','d','d','a','a','b','b','e','f','d','d'])
df['start'] = df[0] != df[0].shift()
df['group'] = df.groupby(0)['start'].cumsum()
result = df.loc[df['group'] == 1]
print(df)
#     0  start  group
# 0   a   True    1.0
# 1   a  False    1.0
# 2   a  False    1.0
# 3   b   True    1.0
# 4   b  False    1.0
# 5   b  False    1.0
# 6   c   True    1.0
# 7   d   True    1.0
# 8   d  False    1.0
# 9   a   True    2.0
# 10  a  False    2.0
# 11  b   True    2.0
# 12  b  False    2.0
# 13  e   True    1.0
# 14  f   True    1.0
# 15  d   True    2.0
# 16  d  False    2.0
df = result[[0]]
print(df)

产量

    0
0   a
1   a
2   a
3   b
4   b
5   b
6   c
7   d
8   d
13  e
14  f

推荐阅读