MCPcopy
hub / github.com/pandas-dev/pandas / _get_period_bins

Method _get_period_bins

pandas/core/resample.py:2734–2807  ·  view source on GitHub ↗
(self, ax: PeriodIndex)

Source from the content-addressed store, hash-verified

2732 return binner, bins, labels
2733
2734 def _get_period_bins(self, ax: PeriodIndex):
2735 if not isinstance(ax, PeriodIndex):
2736 raise TypeError(
2737 "axis must be a PeriodIndex, but got "
2738 f"an instance of {type(ax).__name__}"
2739 )
2740
2741 memb = ax.asfreq(self.freq, how=self.convention)
2742
2743 # NaT handling as in pandas._lib.lib.generate_bins_dt64()
2744 nat_count = 0
2745 if memb.hasnans:
2746 # error: Incompatible types in assignment (expression has type
2747 # "bool_", variable has type "int") [assignment]
2748 nat_count = np.sum(memb._isnan) # type: ignore[assignment]
2749 memb = memb[~memb._isnan]
2750
2751 if not len(memb):
2752 # index contains no valid (non-NaT) values
2753 bins = np.array([], dtype=np.int64)
2754 binner = labels = PeriodIndex(data=[], freq=self.freq, name=ax.name)
2755 if len(ax) > 0:
2756 # index is all NaT
2757 binner, bins, labels = _insert_nat_bin(binner, bins, labels, len(ax))
2758 return binner, bins, labels
2759
2760 freq_mult = self.freq.n
2761
2762 start = ax.min().asfreq(self.freq, how=self.convention)
2763 end = ax.max().asfreq(self.freq, how="end")
2764 bin_shift = 0
2765
2766 if isinstance(self.freq, Tick):
2767 # GH 23882 & 31809: get adjusted bin edge labels with 'origin'
2768 # and 'origin' support. This call only makes sense if the freq is a
2769 # Tick since offset and origin are only used in those cases.
2770 # Not doing this check could create an extra empty bin.
2771 p_start, end = _get_period_range_edges(
2772 start,
2773 end,
2774 self.freq,
2775 closed=self.closed,
2776 origin=self.origin,
2777 offset=self.offset,
2778 )
2779
2780 # Get offset for bin edge (not label edge) adjustment
2781 start_offset = Period(start, self.freq) - Period(p_start, self.freq)
2782 # error: Item "Period" of "Union[Period, Any]" has no attribute "n"
2783 bin_shift = start_offset.n % freq_mult # type: ignore[union-attr]
2784 start = p_start
2785
2786 labels = binner = period_range(
2787 start=start, end=end, freq=self.freq, name=ax.name
2788 )
2789
2790 i8 = memb.asi8
2791

Callers 1

_get_binner_for_timeMethod · 0.80

Calls 10

PeriodIndexClass · 0.90
period_rangeFunction · 0.90
_insert_nat_binFunction · 0.85
_get_period_range_edgesFunction · 0.85
asfreqMethod · 0.45
sumMethod · 0.45
arrayMethod · 0.45
minMethod · 0.45
maxMethod · 0.45
searchsortedMethod · 0.45

Tested by

no test coverage detected