使用条件过滤数据框架

3

我已经创建了以下这样一个数据框:

d = {"one":[1,2,3],"two":[[["c",3],["a",4]],["b",5],["a",6]]}
pd.DataFrame(d)

我的问题是:如何筛选出列"two"只包含"a"的新数据框。
期望结果如下图所示:https://istack.dev59.com/CLtWc.webp

1
请展示一下您认为这些数据应该呈现出什么样的结果。 - piRSquared
谢谢@piRSquared,我刚刚添加了预期结果。 - Huy Nguyen Bui
2个回答

2
这应该能够满足您的需求:
df.loc[df["two"].astype(str).str.contains("a")] 

1
这个答案干净整洁。投票支持这个答案成为正确的答案。我也在考虑使用apply方法,但是apply很耗费资源。 - arnold
谢谢,这会对我很有帮助 :) - Huy Nguyen Bui

0

您可以使用apply方法返回一个布尔掩码,该掩码可用于选择正确的索引。其思想是定义一个要对Series的每个元素执行操作的函数,并将其(使用apply)应用于整个系列。

def fun(element):
    print(element)
    if type(element[0])==list:
        l=[e[0]=='a' for e in element]
    else:
        l = [element[0]=='a']

    if True in l:
        return True
    else:
        return False

df[df.two.apply(fun)]

1
另一个答案给出了相同的结果,但更加优雅。使用它。如果坚持使用apply,则可以将其视为替代解决方案。 - splinter
谢谢你的回答 :) - Huy Nguyen Bui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接