我在数据帧中的过滤器有问题,我有几个列的值用(,(分隔。如果其中一个值大于3(对于第一列(,并且对于第二列中的8(这些值没有排序,并且我在一些行中有NaN(,我需要进行筛选
df示例:
data = {'ID': ["1", "2","3","4"],
'Filter1': ['1', '1,3,5','2,1','7,5'],
'Filter2': ['20,5','7,13','8','9,15,18']
}
df = pd.DataFrame (data, columns = ['ID','Filter1','Filter2'])
ID Filter1 Filter2
0 1 1 20;5
1 2 1;3;5 7;13
2 3 2;1 8
3 4 7;5 9;15;18
我认为split(','(很有用,但我不知道如何应用它,我认为any((也很有用。
我知道用df["filter1"].str.split(","(得到了一个列表,但我不知道如何在同一行进行过滤,没有更复杂的。
我的第二个想法是拆分列,并用正则表达式过滤列的名称,但我无法使其工作。
df['Filter1].str.split(',', expand=True)
我需要像这个一样的东西
ID Filter1 Filter2
1 2 1;3;5 7;13
3 4 7;5 9;15;18
然后让我们将split
与any
一起使用
s1 = df.Filter1.str.split(',',expand=True).astype(float).gt(3).any(1)
s2 = df.Filter2.str.split(',',expand=True).astype(float).gt(8).any(1)
newdf = df[s1 & s2]
newdf
Out[36]:
ID Filter1 Filter2
1 2 1,3,5 7,13
3 4 7,5 9,15,18