我的数据框有几列,
Id | 姓名 | 年龄 |
---|---|---|
1 | 约翰坎普 | 25 |
2 | 理查德 | 35 |
3 | 约翰兰德尔 | 29 |
4 | 约翰卡梅隆 | 26 |
5 | 约翰·雅各布 | 28 |
6 | 奥利弗 | 24 |
7 | 尤金 | 22 |
8 | 约翰坎普 | 21 |
9 | 约翰·克拉克 | 29 |
10 | 约翰里克 | 21 |
预期输出:
Id | 姓名 | 年龄 |
---|---|---|
1 | 约翰坎普 | 25 |
2 | 理查德 | 35 |
4 | 约翰卡梅隆 | 26 |
6 | 奥利弗 | 24 |
7 | 尤金 | 27 |
8 | 约翰坎普 | 25 |
10 | 约翰里克 | 21 |
我需要删除那些以 John 开头但不是 (Camp、Cameron、Rick) 的名字,同时保留其余的名字。
我只想删除不在上面给出的三个名字中的那些约翰,同时保留其他名字。
有人可以帮我吗?
答案 0 :(得分:0)
使用 Series.str.endswith
与由 |
链接的姓氏的 htuple 用于按位 OR
与 Series.str.startswith
和 ~
的反转掩码并在 boolean indexing
中过滤:
sur = ['Camp', 'Cameron', 'Rick']
df = df[df['Name'].str.endswith(tuple(sur)) | ~df['Name'].str.startswith('John')]
print (df)
Id Name age
0 1 John Camp 25
1 2 Richard 35
3 4 John Cameron 26
5 6 Oliver 24
6 7 Eugene 22
7 8 John Camp 21
9 10 John Rick 21