比较多个 pandas 系列中的元素,以列表形式给出

Compare elements in multiple pandas Series, given as a list

我有多个系列,以列表形式给出。系列数可能会有所不同。

s1 = pandas.Series(data=['Bob', 'John', '10', 10, 'i'])
s2 = pandas.Series(data=['John', 'John', 10, 10, 'j'])
s3 = pandas.Series(data=['Bob', 'John', '10', 10, 'k'])
series = [s1,s2,s3] 

我想要的是用一个系列检查列表,如果元素相等,并返回带有索引的列表或 numpy.array 布尔值。

我尝试过的:

numpy.equal.reduce([s for s in series])

or

numpy.equal.reduce([s.values for s in series])

但是对于给定的系列我得到:

array([ True,  True,  True,  True,  True])

我预计:

array([ False,  True,  False,  True,  False])

有没有什么优雅的方法可以完成这项工作,而无需构建大的迭代方法?

谢谢!

您可以简单地构造一个 df 并检查唯一的数量:

print (pd.DataFrame(series).nunique().eq(1))

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

或作为数组:

print (pd.DataFrame(series).nunique().eq(1).to_numpy())

[False  True False  True False]