熊猫通过检查列表来创建新列

时间:2019-01-12 16:46:36

标签: python pandas numpy pivot pandas-groupby

我有一个包含4列A,B,C,D和一个List的数据框。我需要使用B,C,D列和列表创建列,如下面的输出部分所示。

hier_List= [[pages2 , book1  , paper3] , [pen1 , rifle2 , ink3] , [words1 ,book2, ink3]]

必须使用上述列表创建该列。

数据框:

A      B       C        D      
C_1     1971   book1    nan    
C_1     1971   pages2   pages2  
C_1     1970   book1    nan     
C_1     1972   book1    nan    
C_1     1973   letters4 nan    

输出:

对于每一行,我应该检查C列值是否存在于hier_list的任何子列表中。如果存在,则标志是,否则,否。

 A      B       C        D       is_present_any_list
C_1     1971   book1    nan        yes  
C_1     1971   pages2   pages2     yes 
C_1     1970   book1    nan        yes  
C_1     1972   book1    nan        yes  
C_1     1973   letters4 nan        no   

我不知道该怎么做,请帮助我,如果需要进一步说明,请告诉我。

1 个答案:

答案 0 :(得分:1)

numpy.whereisin一起使用,并将嵌套列表与numpy.concatenate合并:

df['is_present_any_list'] = np.where(df['C'].isin(np.concatenate(hier_List)), 'yes', 'no')
print (df)
     A     B         C       D is_present_any_list
0  C_1  1971     book1     NaN                 yes
1  C_1  1971    pages2  pages2                 yes
2  C_1  1970     book1     NaN                 yes
3  C_1  1972     book1     NaN                 yes
4  C_1  1973  letters4     NaN                  no