Pandas删除值列表中的重复项,并标识共享相同值的ID

hxzsmxv2  于 2023-01-11  发布在  其他
关注(0)|答案(1)|浏览(87)

我有一个Pandas数据框:
我以前有重复测试_否;所以我删除了重复项

df['test_no'] = df['test_no'].apply(lambda x: ','.join(set(x.split(','))))

但正如你所看到的,复制品仍然存在我想是多余的空间,我想清理一下
第一部分:

my_id              test_no
0   10000000000055910   461511, 461511
1   10000000000064510   528422
2   10000000000064222   528422,528422 , 528421
3   10000000000161538   433091.0, 433091.0
4   10000000000231708   nan,nan

预期输出

my_id              test_no
0   10000000000055910   461511
1   10000000000064510   528422
2   10000000000064222   528422, 528421
3   10000000000161538   433091.0
4   10000000000231708   nan

第二部分:
我还想检查是否有任何"my_id"共享任何test_no;例如:

my_id               matched_myid
10000000000064222  10000000000064510
6l7fqoea

6l7fqoea1#

您可以使用正则表达式拆分:

import re

df['test_no'] = df['test_no'].apply(lambda x: ','.join(set(re.split(',\s*', x))))

# or
df['test_no'] = [','.join(set(re.split(',\s*', x))) for x in df['test_no']]

如果要保留原始顺序,请使用dict.fromkeys代替set
如果重复项是连续的,则还可以用途:

df['test_no'] = df['test_no'].str.replace(r'([^,\s]+),\s*\1', r'\1', regex=True)

相关问题