我有一个如下所示的数据框:
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”是唯一的。
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