Python DataFrame:按my_list中的列值删除行

时间:2018-01-05 01:51:54

标签: python list sorting dataframe

用Python大约一个月了,我想用一条规则来清理我的DataFrame。我有df和一个列表(lst_1)如下。在item2列中,我有string的值。我想删除item2列的值不在我的lst_1中的任何行。

df=
    key   sellyr  brand  makrc  item1  item2  
0   da12  2013    imp    apt    furi   dcs    
1   da32  2013    sa     rye    rye    app    
2   da14  2013    sa     NaN    NaN    pro
3   da11  2013    sa     prm    NaN    zdc    
4   da31  2013    sa     grm    wdm    czd  
........

#and my list is below
lst_1 = ['dcs','app','czd','des','sed']

#and my output should be
df_new=
    key   sellyr  brand  makrc  item1  item2  
0   da12  2013    imp    apt    furi   dcs    
1   da32  2013    sa     rye    rye    app    
4   da31  2013    sa     grm    wdm    czd  
........

我有一百万行值,所以我希望获得最有效的代码来删除行。有什么想法吗?

--------编辑-------

还有一件事。如果我想用不包含np.nan值的item1 colums对我的df进行排序,df_result2 = df [df.item1!= np.nan]是否可以工作?

df_result2=
    key   sellyr  brand  makrc  item1  item2  
0   da12  2013    imp    apt    furi   dcs    
1   da32  2013    sa     rye    rye    app       
4   da31  2013    sa     grm    wdm    czd  
........

3 个答案:

答案 0 :(得分:1)

试试这个:

df_new = df[df['item2'].isin(lst_1)]

答案 1 :(得分:1)

如果我理解正确,那么你应该做的就是:

df = df[df.item2 in lst_1]

我认为如果将lst_1转换为字典,效率可能更好,因为查找发生了很多,查找在字典中更快。

答案 2 :(得分:1)

包括第二部分(NaN)的回答也使用“&” 2个条件的运算符:

print(df[df.item2.isin(lst_1) & df.item1.notnull()])

输出:

    key  sellyr brand makrc item1 item2
0  da12    2013   imp   apt  furi   dcs
1  da32    2013    sa   rye   rye   app
4  da31    2013    sa   grm   wdm   czd