2015-10-07 64 views
1

我有一个数据帧,看起来像这样(小版):熊猫:看,如果项目在Series.series列表的数据帧

A B C 
0 125 ADB [AF:12] 
1 189 ACB [AF:78, AF:85, AF:98] 
2 148 ADB [] 
3 789 ARF [AF:89, AF:85, AF:12] 
4 789 BCD [AF:76, AF:25] 

我如何可以看到,如果一些列的项目“C”在列表中? 知道,当我做类型(df.C)我得到class 'pandas.core.series.Series'

举例来说,如果该列表是:

['AF:12', 'AF25'] 

预期输出是:

A B C      D 
0 125 ADB [AF:12]     True 
1 189 ACB [AF:78, AF:85, AF:98] False 
2 148 ADB []      False 
3 789 ARF [AF:89, AF:85, AF:12] True 
4 789 BCD [AF:76, AF:25]   True 

我已经试过df['D'] = df['C'].isin(list) 但可能因为“C”是列表的列表而导致False。

有没有办法解决这个问题?

任何帮助,将不胜感激

+0

'df ['C']'的类型是什么?尝试输入(df ['C'] [0])'。 –

回答

1
data = {'B':['ADB','ACB','ADB','ARF','BCD'], 
     'A':[125,189,148,789,789], 
     'C':[['AF:12'],['AF:78', 'AF:85', 'AF:98'],[], 
     ['AF:89', 'AF:85', 'AF:12'],['AF:76', 'AF:25']]} 

df = pd.DataFrame(data) 

def in_list(list_to_search,terms_to_search): 
    results = [item for item in list_to_search if item in terms_to_search] 
    if len(results) > 0: 
     return 'True' 
    else: 
     return 'False' 

df['D'] = df['C'].apply(lambda x: in_list(x, ['AF:12', 'AF:25'])) 

结果:

 A B      C  D 
0 125 ADB    [AF:12] True 
1 189 ACB [AF:78, AF:85, AF:98] False 
2 148 ADB      [] False 
3 789 ARF [AF:89, AF:85, AF:12] True 
4 789 BCD   [AF:76, AF:25] True 
+0

谢谢,看起来像为我工作! 这个功能对处理系列 –

0
def is_in_list(): 
    for ele in df['C']: 
    if ele in list: 
     return True 
    return False; 

也许这个功能可以把它。

3

如果C列的元素的类型为list,那么我相信一个方法来做到这一点是使用和C列的元素列表之间set交集采用Series.apply方法。示例 -

setlst = set(yourlist) 
df['D'] = df['C'].apply(lambda x: bool(setlst.intersection(x))) 

您可以确认C是类型列表中,如果type(df['C'][0])list

另外请注意,不建议使用列表作为变量名称,因为它会影响内置类型list

+0

系列很有帮助,我会尽量多谢。并记住建议。 –