根据包含子字符串的一列删除 DataFrame 中的重复行

问题描述 投票:0回答:1

我有一个如下所示的数据框:

ID, Components
1,  "Room 1, ABC"
2,  "Room 2, ABC"
3,  "Room 3, DEF"
4,  "Room 1, DEF"
5,  "Room 3, DEF" 

我需要过滤数据帧,以便每个房间只有一行,并且保留给定房间的第一次出现:

ID, Components
1,  "Room 1, ABC"
2,  "Room 2, ABC"
3,  "Room 3, DEF"

如上所示,我们可以看到 ID 为 4 和 5 的行已被删除,因为 ID 为 1 和 3 的行中使用了“Room 1”和“Room 3”。

或者,唯一房间的计数也可以工作,但是组件字符串的其余部分可以重复,例如ABC 和 DEF 可以有很多,但只有 1 个 Room 1/2/3...

因此,计算“组件”列中的唯一条目将不起作用。它必须仅对于“Room n”是唯一的。

python pandas dataframe duplicates
1个回答
0
投票

IIUC、

extract
房间 ID 并使用
duplicated
形成用于 布尔索引:

的掩码
df = pd.DataFrame({'ID': [1,2,3,4,5],
                   'Components': ['Room 1, ABC',
                                  'Room 2, ABC',
                                  'Room 3, DEF',
                                  'Room 1, DEF',
                                  'Room 3, DEF']})

m = df['Components'].str.extract(r'(Room \d+)', expand=False).duplicated()

out = df[~m]

输出:

   ID   Components
0   1  Room 1, ABC
1   2  Room 2, ABC
2   3  Room 3, DEF

中间体:

   ID   Components extract      m      ~
0   1  Room 1, ABC  Room 1  False   True
1   2  Room 2, ABC  Room 2  False   True
2   3  Room 3, DEF  Room 3  False   True
3   4  Room 1, DEF  Room 1   True  False
4   5  Room 3, DEF  Room 3   True  False
© www.soinside.com 2019 - 2024. All rights reserved.