【问题标题】:How do I drop all repeated rows based on group after it changed?更改后如何根据组删除所有重复的行?
【发布时间】:2022-10-18 23:27:10
【问题描述】:

在按组更改 1 列中的值后,如何删除所有行?

我有一个看起来像这样的数据:

    ID  Date       CD
0   1   1/1/2015    A
1   1   1/2/2015    A
2   1   1/3/2015    A
3   1   1/4/2015    A
4   1   1/5/2015    B
5   1   1/6/2015    B
6   1   1/7/2015    A
7   1   1/8/2015    A
8   1   1/9/2016    C
9   2   1/2/2015    A
10  2   1/3/2015    A
11  2   1/4/2015    A
12  2   1/5/2015    A
13  2   1/6/2015    A
14  2   1/7/2015    A

我需要删除 ID 1 的最后 3 行,因为它在更改后会返回到 CD A。结果

我正在寻找的是:

由于我没有删除所有重复项,因此我无法使用 Duplicates。我既不保留所有“A”来使用 loc 功能。

我尝试使用 groupby 和 cumcount。任何帮助都会有所帮助。

谢谢你。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    让我们创建一个布尔掩码来标识 CD 列中的值在更改后返回的第一行的出现,然后按 ID 分组此掩码并使用 cummax 标记此类发生后的所有行

    m = df.duplicated(['ID', 'CD']) & (df['CD'] != df['CD'].shift())
    df[~m.groupby(df['ID']).cummax()]
    

        ID      Date CD
    0    1  1/1/2015  A
    1    1  1/2/2015  A
    2    1  1/3/2015  A
    3    1  1/4/2015  A
    4    1  1/5/2015  B
    5    1  1/6/2015  B
    9    2  1/2/2015  A
    10   2  1/3/2015  A
    11   2  1/4/2015  A
    12   2  1/5/2015  A
    13   2  1/6/2015  A
    14   2  1/7/2015  A
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 2014-10-16
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      相关资源
      最近更新 更多