How to compare two Python Pandas series of different lengths?

I have two series of different lengths, and I want to get indexes for which both index and quantity are the same in both series.

Here is a series:

ipdb> s1 s1 000007720 2000.00 group1 -3732.05 group t3 2432.12 group2 -38147.87 FSHLAJ -36711.09 EWkayuwo -3.22 Name: amount, dtype: float64 ipdb> s2 s2 000007720 2000.00 group1 -3732.05 group z 12390.00 group y 68633.43 group x 25.00 group w 3913.00 group v -12750.50 group u -53.49 group t -7500.00 group s -1575.82 group r -10.00 group q 1800.00 group p -4510.34 EWFhjkaQU 455.96 group2 -38147.87 FSHLAJ -36711.09 GEKWJ 5.54 Name: amount, dtype: float64 

When I try to compare them, I get:

 ipdb>s1 == s2 *** ValueError: Series lengths must match to compare 

How can I achieve my goal?

+7
python pandas
source share
1 answer

Do you want to use isin :

 In [121]: s2[s2.isin(s1)] Out[121]: 000007720 group1 -3732.05 group2 -38147.87 FSHLAJ -36711.09 Name: 2000.00, dtype: float64 

I don’t know in which direction you wanted to perform the comparison, that’s all:

 In [122]: s1[s1.isin(s2)] Out[122]: 000007720 group1 -3732.05 group2 -38147.87 FSHLAJ -36711.09 Name: 2000.00, dtype: float64 

The problem with trying to make s1 == s2 is that it makes no sense to compare rows or arrays of different lengths.

If you want the indices to match, add this as a condition:

 In [131]: s1[(s1.index.isin(s2.index)) & (s1.isin(s2))] Out[131]: 000007720 group1 -3732.05 group2 -38147.87 FSHLAJ -36711.09 Name: 2000.00, dtype: float64 
+14
source share

All Articles