过滤Pandas数据帧行

时间:2017-09-06 11:49:23

标签: python-3.x pandas

我的数据框有一列数字。列的数据是以逗号分隔的数字字符串。

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

1 个答案:

答案 0 :(得分:3)

您可以split创建df,并将eqany进行比较。最后一次按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