@@ -3735,10 +3735,10 @@ def asof(self, where, subset=None):
3735
3735
if not self .index .is_monotonic :
3736
3736
raise ValueError ("asof requires a sorted index" )
3737
3737
3738
- if isinstance (self , ABCSeries ):
3738
+ is_series = isinstance (self , ABCSeries )
3739
+ if is_series :
3739
3740
if subset is not None :
3740
3741
raise ValueError ("subset is not valid for Series" )
3741
- nulls = self .isnull ()
3742
3742
elif self .ndim > 2 :
3743
3743
raise NotImplementedError ("asof is not implemented "
3744
3744
"for {type}" .format (type (self )))
@@ -3747,7 +3747,6 @@ def asof(self, where, subset=None):
3747
3747
subset = self .columns
3748
3748
if not is_list_like (subset ):
3749
3749
subset = [subset ]
3750
- nulls = self [subset ].isnull ().any (1 )
3751
3750
3752
3751
if not is_list_like (where ):
3753
3752
start = self .index [0 ]
@@ -3761,13 +3760,21 @@ def asof(self, where, subset=None):
3761
3760
loc = self .index .searchsorted (where , side = 'right' )
3762
3761
if loc > 0 :
3763
3762
loc -= 1
3764
- while nulls [loc ] and loc > 0 :
3763
+
3764
+ if is_series :
3765
+ values = self ._values
3766
+ while loc > 0 and isnull (values [loc ]):
3767
+ loc -= 1
3768
+ return values [loc ]
3769
+
3770
+ while loc > 0 and self .loc [loc , subset ].isnull ().any ():
3765
3771
loc -= 1
3766
3772
return self .iloc [loc ]
3767
3773
3768
3774
if not isinstance (where , Index ):
3769
3775
where = Index (where )
3770
3776
3777
+ nulls = self .isnull () if is_series else self [subset ].isnull ().any (1 )
3771
3778
locs = self .index .asof_locs (where , ~ (nulls .values ))
3772
3779
3773
3780
# mask the missing
0 commit comments