Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中比较1d和2d系列的有效方法_Python_String_Pandas_Numpy_Series - Fatal编程技术网

在python中比较1d和2d系列的有效方法

在python中比较1d和2d系列的有效方法,python,string,pandas,numpy,series,Python,String,Pandas,Numpy,Series,我有一个数据帧,其中一列作为字符串数组,第二列作为一个字符串值 a = pd.Series([["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"]]) b = pd.Series(["a","d","e", "c", "b"]) 我想检查a中是否包含b,但在运行isin函数时收到一个错误 b.isin(a) 任何解决办法。我在这里特别尝试避免循环,不确定这

我有一个数据帧,其中一列作为字符串数组,第二列作为一个字符串值

a = pd.Series([["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"]])

b = pd.Series(["a","d","e", "c", "b"])
我想检查a中是否包含b,但在运行isin函数时收到一个错误

b.isin(a)
任何解决办法。我在这里特别尝试避免循环,不确定这是否是一个基于运行时的好策略

编辑:

**a                          b**
["a","b","c", "d"]           a
["a","b","c", "d"]           d
["a","b","c", "d"]           e
["a","b","c", "d"]           c
["a","b","c", "d"]           b
预期输出是进行行比较的系列

[True True False True True]

这应该适合您:

import pandas as pd
a = pd.Series([["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"]])
b = pd.Series(["a","d","e", "c", "b"])
[x in y for y,x in zip(a,b)]
。。。其输出为:

[True, True, False, True, True]

pandas.Series
实现了一种方法,您可以通过以下方式使用该方法来查找
b
中也出现在
a
列表中的元素:

import pandas as pd

a = pd.Series([["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"],["a","b","c", "d"]])
b = pd.Series(["a","d","e", "c", "b"])

a.combine(b, lambda a,b: b in a)
输出:

0     True
1     True
2    False
3     True
4     True
dtype: object

预期的输出是什么?我不确定效率,但是
any(map(lambda x:x==b.tolist(),a))
应该可以工作;我编辑了帖子以包含所需的输出。感谢您指出这一点。
b
在序列中有5个字符串,但是
a
中的每一行只有4个元素。而且,
a
中的所有行都相同。你能说说为什么你希望
b
匹配前两行和后两行,而不是中间一行吗?啊!我明白你现在用最新的编辑是什么意思了。谢谢。谢谢分享一个不使用循环的方法。