比较多个 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]
我有多个系列,以列表形式给出。系列数可能会有所不同。
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]