You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Pandas中删除指定重复项并保留首个出现的值?

解决DataFrame中保留连续'A'列'df'组首个值的问题

嘿,我来帮你搞定这个需求!你需要删除DataFrame里列A为'df'的重复项,但只保留每组连续重复'df'的第一个值,非'df'的行全部保留对吧?看你给的原始数据和期望结果,核心就是对连续的'df'块做去重,只留第一个。

具体实现步骤(用Pandas)

我直接给你可运行的代码,再一步步解释:

首先,先把你的原始数据转换成DataFrame:

import pandas as pd

# 你的原始数据
data = {
    'A': ['qw', 'er', 'ew', 'df', 'df', 'df', 'df', 'we', 'we', 'df', 'df', 'we', 'qw'],
    'B': [1, 2, 4, 34, 2, 3, 4, 2, 4, 34, 3, 4, 2],
    'C': [3, 4, 8, 34, 5, 3, 4, 5, 4, 9, 3, 7, 2],
    'D': [1, 2, 44, 34, 2, 7, 7, 5, 4, 34, 9, 4, 7],
    'E': [1, 6, 4, 34, 2, 3, 4, 2, 4, 34, 3, 4, 2]
}
df = pd.DataFrame(data)

接下来,我们需要给连续的行分组:

  • 当某一行的A列不是'df',或者和前一行的A列值不一样时,就标记为一个新组
  • 用这个分组键,我们就能把连续的'df'分成独立的组
# 创建分组标记:满足条件时生成新的分组ID
group_key = (df['A'] != df['A'].shift()) | (df['A'] != 'df')
group_key = group_key.cumsum()

最后一步过滤数据:

  • 对每个分组,如果组内是'df'开头的,只保留第一行;否则保留整个组的所有行
# 分组过滤得到结果
result = df.groupby(group_key).apply(lambda x: x.iloc[[0]] if x['A'].iloc[0] == 'df' else x).reset_index(drop=True)

看看结果

运行完上面的代码,result就是你要的样子:

ABCDE
qw1311
er2426
ew48444
df34343434
we2552
we4444
df3493434
we4744
qw2272

这样就精准实现了你的需求:连续的'df'组只留第一个,其他行全部保留,完全匹配你给出的期望结果~

内容的提问来源于stack exchange,提问作者С. Дэлгэрцэцэг

火山引擎 最新活动