我有一个唯一名称列表(准确地说是4,300个)。 unique_names = ['James','Erika','Akshay','Neil'等。] 我在数据框中有一列,每一行都有它自己的名称列表。 我必须从我的unique_names列表中找出此列中的哪些行包含名称。
我尝试过屏蔽,但是每次它只返回2行,而不是所有包含我的列表unique_names中的名称的行。
for name in unique_names:
if name in unique_names:
mask = df['names'].apply(lambda x: name in x)
df1 = df[mask]
我的预期结果是对于列表中的每个包含唯一名称的行,其唯一列表,但我只返回名称列表中包含名称“ Akshay”的两行,尽管我看到其他行包含名称像“尼尔”和“埃里卡”之类的都不返回。
答案 0 :(得分:0)
我希望以下内容就足够了。
mask = df['names'].apply(lambda x: any(name in x for name in unique_names))
如果unique_names
是set
并且每行的名称数很小:
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)))
答案 1 :(得分:0)
我会重新考虑您如何解决此问题。首先,您的原始代码首先对名为unique_names的容器中的名称进行迭代,然后检查其是否在unique_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)