首页 > 解决方案 > pandas 通过检查列表创建一个新列

问题描述

我有一个包含 4 列 A、B、C、D 和一个列表的数据框。我需要使用 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   

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

标签: pythonpandasnumpypivotpandas-groupby

解决方案


使用numpy.wherewithisin和扁平化嵌套列表 with 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

推荐阅读