我正试图找到解决这个问题的办法:
import pandas as pd
i = ['7.3, 6.9.1', '7.3.1, 5.10', '6.9']
s = pd.DataFrame(i, columns=['vals'])
s[(s["vals"].apply(lambda x: '7.3' in x))]
这里期望的输出是:
vals
0 7.3, 6.9.1
但是,我得到的输出是:
vals
0 7.3, 6.9.1
1 7.3.1, 5.10
注意,我需要支持某些版本的 in
,因为 vals 中可以有多个值;但是,我需要确保我只取回完全匹配的行,即 7.3 而不是 7.3.1。
请您参考如下方法:
map
和 set.isdisjoint
s[~s.vals.str.split(', ').map({'7.3'}.isdisjoint)]
vals
0 7.3, 6.9.1
split
与 expand=True
和 any(axis=1)
s[s.vals.str.split(', ', expand=True).eq('7.3').any(1)]
vals
0 7.3, 6.9.1
理解/ bool 切片
s[['7.3' in x.split(', ') for x in s.vals]]
vals
0 7.3, 6.9.1