【发布时间】: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,您可以添加预期输出吗?