首页 > 解决方案 > 如何更改此设置,以使 s2 上的输出也仅显示未从 s1 重复的输出?

问题描述

我只想要 s1 和 s2 不匹配的输出。我必须取出 s1 和 s2 中的所有数据,只保留唯一数据。这是我的代码:

for i in range(0,10):
  if s1[i] in s2.values:
    s1 = s1.drop([i])
print('Different values in s1:')
print(s1)
print()
for i in range(0,10):
  if s2[i] in s1.values:
    s2 = s2.drop([i])
print('Different values in s2:')
print(s2)

它适用于 s1,但由于 s1 的值已经被擦除,s2 只显示每个输出。如何更改代码以使其适用于两者?

这是两个熊猫系列的当前输出(我使用了 randint() 所以每次我重新运行代码时,数字都会改变,但它应该总是看起来像这样):

Panda Series 1:
0     3
1     3
2     9
3    10
4     6
5     7
6     2
7     5
8     4
9     9
dtype: int64

Panda Series 2:
0     8
1     9
2     5
3     8
4     8
5    10
6    10
7     8
8    10
9     6
dtype: int64

这是错误代码的输出:

Different values in s1:
0    3
1    3
5    7
6    2
8    4
dtype: int64

Different values in s2:
0     8
1     9
2     5
3     8
4     8
5    10
6    10
7     8
8    10
9     6
dtype: int64

标签: pythonpandasseries

解决方案


一种方法是复制 s1(例如 s1a)并更新它,然后在 s2 上执行相同的操作,但使用 s1 来查询数据。完成后设置 s1 = s1a。

s1a = s1
for i in range(0,10):
  if s1a[i] in s2.values:
    s1a = s1a.drop([i])
print('Different values in s1:')
print(s1a)
print()
for i in range(0,10):
  if s2[i] in s1.values:
    s2 = s2.drop([i])
print('Different values in s2:')
print(s2)
s1 = s1a

您也可以使用 how=inner 加入 s1 和 s2。结果将是您需要从两者中删除的交叉点。


推荐阅读