如何更改此设置,以便 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 只显示每个输出。如何更改代码以使其适用于两者?

这是我对两个 Pandas 系列的当前输出(我使用了 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

解决方法

一种方法是复制 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。结果将是您需要从两者中删除的交集。

,

您可以先确定要保留在两个系列中的值,然后再删除不需要的值:

k1 = s1.apply(lambda x: x not in s2.values)
k2 = s2.apply(lambda x: x not in s1.values)
s1 = s1[k1]
s2 = s2[k2]

预期,你得到 s1:

0    3
1    3
5    7
6    2
8    4
Name: s1,dtype: int64

对于 s2:

0    8
3    8
4    8
7    8
Name: s2,dtype: int64