使用基于一列的布尔向量过滤数据帧

时间:2016-10-07 20:15:07

标签: pandas

我对熊猫有点新鲜。 我有一个数据框,words_df有两列。 第一列[[0]])是一个单词列表,第二列是我想在下游进程中使用的值。 看起来像这样:

                   a:State-word  occurrences
0                      FIRE         1535
1                       BRR         1189
2                     GREEN          521
3                    ORANGE          504
4                    PURPLE          503
5                      BLUE          482
6                    VIOLET          480
7                    YELLOW          445
8                    INDIGO          434
9                     BLACK          392
10                    WHITE          381
11                     PINK          322
...

我有第二个要过滤的单词列表。 如果我的filter_list中有单词,请删除words_df中的行。

到目前为止,我已经成功: filter_list = words_df[[0]].isin(filter_list)

然后我尝试用以下方法执行此操作: words_df[~filter_list]

它有点奏效,但大部分都没有。 在另一端看起来像这样:

               a:State-word  occurrences
0                       NaN          NaN
1                       NaN          NaN
2                       NaN          NaN
3                       NaN          NaN
4                    PURPLE          NaN
5                       NaN          NaN
6                       NaN          NaN
7                    YELLOW          NaN
8                    INDIGO          NaN
9                       NaN          NaN
10                      NaN          NaN
11                      NaN          NaN

我希望它看起来像这样:

               a:State-word  occurrences
1                    PURPLE          503
2                    YELLOW          445
3                    INDIGO          434

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你接近答案

# Test data
df = DataFrame({'a:State-word': ['FIRE','BRR', 'GREEN', 'ORANGE', 'PURPLE', 'BLUE', 'VIOLET'],
                'occurrences': [1535, 1189, 521, 504, 503, 482, 480]})
filter_list = ['FIRE', 'BRR', 'GREEN', 'ORANGE', 'BLUE']
df

#   a:State-word  occurrences
# 0         FIRE         1535
# 1          BRR         1189
# 2        GREEN          521
# 3       ORANGE          504
# 4       PURPLE          503
# 5         BLUE          482
# 6       VIOLET          480

df[~df['a:State-word'].isin(filter_list)]

#   a:State-word  occurrences
# 4       PURPLE          503
# 6       VIOLET          480