gpt4 book ai didi

python - 用一系列元组测试包含

转载 作者:行者123 更新时间:2023-11-28 21:41:12 26 4
gpt4 key购买 nike

我有一个 pandas.Series 元组:

s = pd.Series([('a','b','c'), ('a','c','b'), ('c','a','b')])

我想检查 ('a','b','c') 是否在 s(或任何其他元组)中。所以:

('a', 'b', 'c') in s

返回 False。然而,

('a', 'b', 'c') in s.tolist()

如预期的那样返回 True。是否有一种优化的 Pandas 方式来做到这一点?转换成列表感觉很不pythonic。

最佳答案

您可以使用 equal 操作创建一个 bool 系列,然后使用 any() 获得所需的结果。或者作为一种更全面的方法,您可以使用系列对象的 apply() 方法,以便对所有项目应用特定功能。然后你可以使用 any() 得到预期的结果:

In [28]: (s == ('a', 'b', 'c')).any()
Out[28]: True

In [30]: s.apply(('a', 'b', 'c').__eq__).any()
Out[30]: True

另请注意,由于 Series 是带有轴标签的一维 ndarray,因此将对索引而不是项目执行使用 in 运算符的成员资格检查。

In [32]: 3 in s
Out[32]: False

In [33]: 2 in s
Out[33]: True

如果您想更改此行为,您可能希望通过创建您自己的 Series 类型来覆盖对象的 __contains__ 方法。

In [39]: class MySeries(pd.Series):
def __init__(self, *args, **kwargs):
super(MySeries, self).__init__(*args, **kwargs)
def __contains__(self, arg):
return (self == arg).any()
....:

In [40]: ms = MySeries([('a','b','c'), ('a','c','b'), ('c','a','b')])

In [41]: ('a', 'b', 'c') in ms
Out[41]: True

In [42]:

In [42]: ('a', 'b', 't') in ms
Out[42]: False

您还可以让它同时适用于索引和项目:

In [51]: class MySeries(pd.Series):
def __init__(self, *args, **kwargs):
super(MySeries, self).__init__(*args, **kwargs)
def __contains__(self, arg):
if isinstance(arg, int):
return super(MySeries, self).__contains__(arg)
return (self == arg).any()
....:

In [52]:

In [52]: ms = MySeries([('a','b','c'), ('a','c','b'), ('c','a','b')])

In [53]:

In [53]: 3 in ms
Out[53]: False

In [54]: 2 in ms
Out[54]: True

In [55]:

In [55]: ('a', 'b', 'c') in ms
Out[55]: True

In [56]: ('a', 'b', 'd') in ms
Out[56]: False

关于python - 用一系列元组测试包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45010018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com