Pandas:看看项目是否在列表中系列。系列在数据帧中

2024-04-29 13:48:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的数据帧(小版本):

    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'

例如,如果列表是:

^{pr2}$

预期产出为:

    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”是一个列表。在

有没有办法绕过这个问题?在

任何帮助都将不胜感激


Tags: 数据项目core版本falsetruepandasdf
3条回答
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']))

结果:

^{pr2}$

如果C列的元素类型是list,那么我相信一种方法是使用^{}方法在列表和{}列的元素之间使用set交集。示例-

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

如果type(df['C'][0])list,则可以确认C是list类型。在

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

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

也许这个功能可以做到。在

相关问题 更多 >