For two pandas A series objects and matches. Matches contain a subset of indices A and have logical entries. How to make the equivalent of logical indexing?
If the matches were the same length as A, then one could simply use:
A[Matches] = 5.*Matches
In the case of matches less than A, it turns out:
error: Unalignable boolean Series key provided
Edit 1: Illustration on request
In [15]: A = pd.Series(range(10)) In [16]: A Out[16]: 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 dtype: int64 In [17]: Matches = (A<3)[:5] In [18]: Matches Out[18]: 0 True 1 True 2 True 3 False 4 False dtype: bool In [19]: A[Matches] = None --------------------------------------------------------------------------- IndexingError Traceback (most recent call last) <ipython-input-19-7a04f32ce860> in <module>() ----> 1 A[Matches] = None C:\Anaconda\lib\site-packages\pandas\core\series.py in __setitem__(self, key, value) 631 632 if _is_bool_indexer(key): --> 633 key = _check_bool_indexer(self.index, key) 634 try: 635 self.where(~key, value, inplace=True) C:\Anaconda\lib\site-packages\pandas\core\indexing.py in _check_bool_indexer(ax, key) 1379 mask = com.isnull(result.values) 1380 if mask.any(): -> 1381 raise IndexingError('Unalignable boolean Series key provided') 1382 1383 result = result.astype(bool).values IndexingError: Unalignable boolean Series key provided In [20]:
As a result, I am looking for:
In [16]: A Out[16]: 0 None 1 None 2 None 3 3 4 4 5 5 6 6 7 7 8 8 9 9 dtype: int64
The design of the Matches series is artificial and illustrative only. Also, in my case, the row indices are obviously not numeric and are not equal to the values ββof the elements ...
source share