python pandas过滤掉行不起作用

时间:2016-01-16 15:53:35

标签: python pandas filter

我想通过一个名为'mid'的列过滤pandas数据框,只保留特定范围内具有字段'mid'的行。

我的代码如下:

df_org是结构['uid','mid','cv1','cv2','cv3']的数据框,series_moviesID是一个pandas系列,其中包含我要用来过滤df_org数据框的所有值。

filterOut(self, df_org, series_movieID, colName='mid'):
    mask=((df_org[colName]).isin(series_movieID))
    df_filterOut = df_org[mask]
    assert set(df_filterOut['mid']).issubset(set(series_movieID))
    return df_filterOut.reset_index().drop(labels='index', axis=1)

但断言表达无法通过,任何人都知道潜在的错误吗?

1 个答案:

答案 0 :(得分:0)

嗯。你的代码适合我。也尝试在s,df和两者中使用dupes并且它运行了。您可以分享更多细节吗?

In [2]: s = pd.Series(range(4), index=['a', 'b', 'c', 'd'])

In [3]: df = pd.DataFrame({'a': range(10), 'b': range(10, 20)}, index=range(20, 30))

In [4]:

In [4]: print s
a    0
b    1
c    2
d    3
dtype: int64

In [5]: print df
    a   b
20  0  10
21  1  11
22  2  12
23  3  13
24  4  14
25  5  15
26  6  16
27  7  17
28  8  18
29  9  19

In [6]: def filterOut(df_org, series_movieID, colName='mid'):
   ...:         mask=((df_org[colName]).isin(series_movieID))
   ...:         df_filterOut = df_org[mask]
   ...:         assert set(df_filterOut[colName]).issubset(set(series_movieID))
   ...:         return df_filterOut.reset_index().drop(labels='index', axis=1)
   ...:

In [7]: filterOut(df, s, colName='a')
Out[7]:
   a   b
0  0  10
1  1  11
2  2  12
3  3  13