过滤具有 2 个相同单词的行
Posted
技术标签:
【中文标题】过滤具有 2 个相同单词的行【英文标题】:Filtering the row that has the 2 same words 【发布时间】:2021-05-24 03:45:30 【问题描述】:我想从数据框中过滤出具有两个相同单词的行。
我的数据框看起来像:
Invitation
0 (Anna, Lia, Kim)
1 (Angela, Tom, Yoon, Tom)
2 (Lily, Mina, John, John)
3 (Ella, Kim, Annie, Caesy)
4 (Bella, Kate, Lyon)
我想要的输出是:
Invitation
0 (Anna, Lia, Kim)
1 (Ella, Kim, Annie, Caesy)
2 (Bella, Kate, Lyon)
我首先将数据框放入列表中
df_name["Invitation"] = df_name["Invitation"].tolist()
但我不确定下一步该做什么。
【问题讨论】:
是("Anna", "Lia", "Kim")
还是"(Anna, Lia, Kim)"
存储在行中?是什么类型的?
我试过df_name["Invitation"].dtype
,结果是dtype('O')
你能告诉我为什么(贝拉、凯特、里昂)应该出现在输出中吗?
对于索引 1,“Tom”被列出两次,对于索引 2,“John”被列出两次。其余的行都只有一次名称!
@Lyliie - 你能测试一下print (type(df_name.loc[0, "Invitation"]))
是什么吗?
【参考方案1】:
如果存在元组,您可以通过比较相同长度的集合和元组值来过滤行 - 因此删除具有 2 个或更多重复单词的行:
print (type(df_name.loc[0, "Invitation"]))
<class 'tuple'>
df = df_name[df_name['Invitation'].apply(lambda x: len(set(x)) == len(x))]
print (df)
Invitation
0 (Anna, Lia, Kim)
3 (Ella, Kim, Annie, Caesy)
4 (Bella, Kate, Lyon)
如果需要删除恰好包含 2 个单词的行:
from collections import Counter
mask = df_name['Invitation'].apply(lambda x: any(v == 2 for k, v in Counter(x).items()))
df = df_name[~mask]
print (df)
Invitation
0 (Anna, Lia, Kim)
3 (Ella, Kim, Annie, Caesy)
4 (Bella, Kate, Lyon)
【讨论】:
有没有办法将列表中包含特定单词的行删除两次?例如,将所有带有“John”的行删除两次,但不删除其他名称的行两次? @Lyliie - 然后使用df = df_name[~df_name['Invitation'].apply(lambda x: any(v == 2 and k == 'John' for k, v in Counter(x).items()))]
以上是关于过滤具有 2 个相同单词的行的主要内容,如果未能解决你的问题,请参考以下文章
如果单词退出,则删除行并在powershell中打印具有两个单词的行之间的所有行
scala 根据具有相同值的 2 列过滤掉连接 df 中的行 - 最佳方式