使用列表时如何屏蔽?

2024-04-20 00:45:59 发布

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

我有一个独特的名字列表(确切地说是4300)。唯一的名字=['James'、'Erika'、'Akshay'、'Neil'等]。 我在数据框中有一列,每一行都有自己的名称列表。 我必须从我的唯一名称列表中找出此列中的哪些行包含名称。你知道吗

我尝试过掩蔽,但每次它只返回2行,而不是所有包含我列表中一个名称的行。你知道吗

for name in unique_names: 
    if name in unique_names: 
       mask = df['names'].apply(lambda x: name in x) 
       df1 = df[mask] 

我的预期结果是,对于列表中包含唯一名称的每一行,我只返回两行,其中包含名称列表中的名称'Akshay',尽管我看到其他行包含名称,如'Neil'和'Erika',但没有返回。你知道吗


Tags: 数据namein名称df列表fornames
2条回答

我会重新考虑你是怎么解决这个问题的。首先,您的原始代码首先遍历名为unique\u names的容器中的名称,然后检查它是否在unique\u names中。每一次迭代都将通过该测试,因为您从测试其成员资格的同一容器中提取它们。你知道吗

我最好的建议是迭代行而不是名称。伪代码如下:

rows_with_unique = list()
for row in dataframe:
    for name in unique_names:
        if name in row:
          rows_with_unique.append(row) (or whatever you are trying to extract)

我希望下面这些就足够了。你知道吗

mask = df['names'].apply(lambda x: any(name in x for name in unique_names))

如果unique_namesset并且每行的名称数很小:

mask = df['names'].apply(lambda x: any(name in unique_names for name in x))

或:

mask = df['names'].apply(lambda x: not unique_names.isdisjoint(x)))

相关问题 更多 >