我有一个数据框,包含一个名为numbers的列。该列数据是由逗号分隔的数字字符串。
numbers
-------
1,3,4,5,17,30
5,6,18,37,41,42
1,2,5,14,19,20
1,5,13,20,29,31
1,9,10,11,14,17
2,9,13,25,30,35
如何获取所有包含数字1和5的字符串?
期望的输出:
numbers
-------
1,3,4,5,17,30
1,2,5,14,19,20
1,5,13,20,29,31
我有一个数据框,包含一个名为numbers的列。该列数据是由逗号分隔的数字字符串。
numbers
-------
1,3,4,5,17,30
5,6,18,37,41,42
1,2,5,14,19,20
1,5,13,20,29,31
1,9,10,11,14,17
2,9,13,25,30,35
如何获取所有包含数字1和5的字符串?
期望的输出:
numbers
-------
1,3,4,5,17,30
1,2,5,14,19,20
1,5,13,20,29,31
您可以使用split
创建df
,然后使用eq
与any
进行比较。最后通过boolean indexing
进行过滤:
df1 = df['numbers'].str.split(',', expand=True).astype(int)
df = df[df1.eq(1).any(1) & df1.eq(5).any(1)]
print (df)
numbers
0 1,3,4,5,17,30
2 1,2,5,14,19,20
3 1,5,13,20,29,31
使用contains
方法进行条件筛选的另一种解决方案:
a = df['numbers'].str.contains(',1,|,1$|^1,')
b = df['numbers'].str.contains(',5,|,5$|^5,')
df = df[a & b]
print (df)
numbers
0 1,3,4,5,17,30
2 1,2,5,14,19,20
3 1,5,13,20,29,31
1
或 5
,那么是的。但如果需要 1
和 5
,我认为不行。 - jezraeldf1.eq(1).any(1) & df1.eq(5).any(1)
可以被替换为 df1.isin([1,5]).any(1)
,是吗? - IanS1或5
。所以会得到不同的输出。 - jezrael