我有一个数据框,我正在try 使用group-by删除重复项.

data = {
    'Type': ['A', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'C','D','D'],
    'Key': ['ZPOC', 'adr#', 'name#', 'city#', 'adr#', 'city#', 'city#', 'ZZRE', 'ZPOC', 'adr#', 'name#', 'city#', 'adr#', 'city#', 'city#', 'ZZRE','item','item']
}

df = pd.DataFrame(data)

在类型列中,您可以看到该行从‘A’开始.因此,在下一个‘A’出现之前,它是我的一个团队.从该组中,我希望根据键列中的值保留最后出现的行,从而删除重复的行.

因此,只考虑第一组(A-B-C).在该组中,ADR#和CITY#重复出现两次,因此我希望仅从该重复项中保留最后一次出现.这一进程应针对每一组继续进行.

Note the duplicate rows should be removed only where Type = 'B'

desired output Desired Output

我几乎得到了我想要的输出,但过滤在Type=‘B’上不起作用

import pandas as pd

data = {
    'Type': ['A', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'C','D','D'],
    'Key': ['ZPOC', 'adr#', 'name#', 'city#', 'adr#', 'city#', 'city#', 'ZZRE', 'ZPOC', 'adr#', 'name#', 'city#', 'adr#', 'city#', 'city#', 'ZZRE','item','item']
}

df = pd.DataFrame(data)

# Create a mask for rows where 'Type' is 'A'
mask_a = df['Type'] == 'A'

# Create a new column 'Group' to identify the groups based on occurrences of 'A' in 'Type' column
df['Group'] = mask_a.cumsum()

# Filter and remove duplicates within each group

df = df.groupby('Group').apply(lambda x: x.drop_duplicates(subset='Key', keep='last') if (x['Type'] == 'B').any() else x)


# Drop the 'Group' column as it's no longer needed
df.drop('Group', axis=1, inplace=True)

df

my output

如您所见,Type=‘D’的重复行也被删除,这是应该保留的.不知何故,我不知道为什么过滤不起作用.

推荐答案

您可以将.groupby+.drop_duplicates翻倍:

out = df.groupby(df["Type"].eq("A").cumsum()).apply(
    lambda x: x.groupby("Type", group_keys=False).apply(
        lambda x: x.drop_duplicates(keep="last") if x["Type"].iat[0] == "B" else x
    )
)
print(out)

打印:

        Type    Key
Type               
1    0     A   ZPOC
     2     B  name#
     4     B   adr#
     6     B  city#
     7     C   ZZRE
2    8     A   ZPOC
     10    B  name#
     12    B   adr#
     14    B  city#
     15    C   ZZRE
     16    D   item
     17    D   item

Python相关问答推荐

仅从风格中获取 colored颜色 循环

如何在BeautifulSoup中链接Find()方法并处理无?

2维数组9x9,不使用numpy.数组(MutableSequence的子类)

时间序列分解

如何将双框框列中的成对变成两个新列

标题:如何在Python中使用嵌套饼图可视化分层数据?

运行Python脚本时,用作命令行参数的SON文本

有症状地 destruct 了Python中的regex?

Mistral模型为不同的输入文本生成相同的嵌入

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

多指标不同顺序串联大Pandas 模型

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

从源代码显示不同的输出(机器学习)(Python)

如何获得满足掩码条件的第一行的索引?

用由数据帧的相应元素形成的列表的函数来替换列的行中的值

Scipy.linprog的可行性有问题吗?(A_ub@x0<;=b_ub).all()为True-但是-linprog(np.zeros_like(X0),A_ub=A_ub,b_ub=b_ub)不可行

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?

删除另一个div中的特定div容器