【问题标题】:How to group rows with duplicate value in 1 column and different value in another column without removing/dropping other duplicated rows? [duplicate]如何在不删除/删除其他重复行的情况下将 1 列中具有重复值的行和另一列中具有不同值的行分组? [复制]
【发布时间】:2021-03-10 09:13:44
【问题描述】:

我有一个大约 12K+ 行和 16 列的数据框。有些行是重复的,这很好,但我想将那些在 1 列重复但在这 1 个特定列不同的行分组。举个简单的例子,参考下面:

ID    Plate_Number          
A     SWD1314
A     SKT5721
B     SKT1419
B     SKT1419
C     MNJ1009
C     MNJ1009

现在,我想要的输出是获得 ID 为 A 而不是 B 的客户。基本上,我希望看到一个客户为

我希望结果是这样的: DF 仅适用于客户 A

ID    Plate_Number          
A     SWD1314
A     SKT5721

DF 仅适用于客户 B 和 C:

ID    Plate_Number 
B     SKT1419
B     SKT1419
C     MNJ1009
C     MNJ1009

我尝试过使用 groupBy :

df.groupby(['ID'])

我也试过了:

mask = df.duplicated(subset=['ID'], keep=False)
df[mask]

但是他们两个也会给客户 B 和 C 里面的列表。我想获得具有不同车牌号的重复 ID。一定有一种我不知道的方法只能获得客户 A,而不是 B 和 C。谢谢。

编辑:如果可能的话,我不想删除客户 B 和 C,因为它们仍然相关,只是客户 A 属于另一个组,而客户 B 和 C 属于另一个组。

编辑:添加了另外 1 个预期结果,即客户 B 和 C 的 DF。

【问题讨论】:

  • 使用df.drop_duplicates(subset=['ID', 'Plate_Number'], keep=False)
  • 也许还添加sort_values('ID') 以确保得到A 而不是B @jezrael
  • @Erfan - 我认为没有必要。因为删除了所有的欺骗。
  • @jezrael 如果可能,我不想删除其他重复的行。更像是我想将客户 A 放入另一个 DF,因为客户 B 和 C 在另一个组中仍然相关。
  • @Lutfi - 如果不需要删除 customer B and C,您可以添加预期输出吗?

标签: python pandas dataframe


【解决方案1】:

drop_duplicates 的替代方案:

df.drop_duplicates(subset=['ID', 'Plate_Number'], keep=False)

输出:

  ID Plate_Number
0  A      SWD1314
1  A      SKT5721

【讨论】:

  • 好,然后像骗子一样接近。
  • @jezrael 差不多,当然,如果不需要其他任何东西,就去掉mask
  • 是的,这是删除答案的原因。
  • @jezrael 很酷,有道理
  • @perl 我已经编辑了这个问题。我不想删除其他重复的行。更像是我想将客户 A 放入另一个 DF,因为客户 B 和 C 在另一个组中仍然相关。
猜你喜欢
  • 2019-06-30
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2019-07-17
  • 2017-03-02
相关资源
最近更新 更多