问题描述
我只想要 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