Pandas resample (). Size () возвращает различные типы объектов в зависимости от частоты дискретизации. - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть Pandas DataFrame, который я суммирую, используя groupby () , resample () и size () Функции:

freq = upgrade.groupby("UPGRADESTRATEGY")
type(freq)
<class 'pandas.core.groupby.groupby.DataFrameGroupBy'>

print(freq.resample('Q'))
DatetimeIndexResamplerGroupby [freq=<QuarterEnd: startingMonth=12>, axis=0, closed=right, label=right, convention=e, base=0]

print(freq.resample('Y'))
DatetimeIndexResamplerGroupby [freq=<YearEnd: month=12>, axis=0, closed=right, label=right, convention=e, base=0]

К моему удивлению, функция size () возвращает различные типы в зависимости от частоты дискретизации:

  • , если я произвожу выборку за квартал, я получу Series ,
  • Если я произвожу выборку по году, я получу DataFrame .

Код:

print(type(freq.resample('Q').size()))
<class 'pandas.core.series.Series'>

print(type(freq.resample('Y').size()))
<class 'pandas.core.frame.DataFrame'>

Выходы также семантически различны,поэтому я не могу повторно использовать один и тот же конвейер для обработки результатов.Я ожидал, что тип выходного объекта и структура выходных данных не зависят от частоты дискретизации, которую я использовал.

Вопросы:

  1. Почему яполучение другого типа объекта в результате использования функции size () , когда я использую разные частоты дискретизации?
  2. Как изменить код, чтобы получить тот же тип объекта и ту же структуру объекта независимо отуказанная частота дискретизации?

Я использую версию Pandas 0.23.4.

ОБНОВЛЕНИЕ:

Проблема, по-видимому, связана с данными-зависимый.Я свел его до 10 записей, что привело к изменению типа вывода.Я не могу объяснить, почему я получаю другой тип вывода здесь.Сортировка значений по дате не приводит к изменению результата.

u2.dtypes
UPGRADESTRATEGY               object
SCENARIO_STARTDATE    datetime64[ns]
dtype: object

Создает DataFrame.

print(u2.iloc[-105:-96])
      UPGRADESTRATEGY  SCENARIO_STARTDATE
18645               b 2016-12-20 14:48:57
18646               a 2017-01-07 16:58:44
18647               b 2017-01-11 14:39:58
18648               a 2017-01-10 15:42:22
18649               a 2017-01-10 10:07:34
18650               a 2017-01-12 15:31:14
18651               a 2017-01-13 12:44:02
18652               a 2017-01-13 14:51:59
18653               a 2016-12-12 22:30:01


type(u2.iloc[-105:-96].groupby(["UPGRADESTRATEGY"]).resample('Q', on='SCENARIO_STARTDATE').size())

pandas.core.frame.DataFrame

Создает Series.

print(u2.iloc[-104:-96])

      UPGRADESTRATEGY  SCENARIO_STARTDATE
18646               a 2017-01-07 16:58:44
18647               b 2017-01-11 14:39:58
18648               a 2017-01-10 15:42:22
18649               a 2017-01-10 10:07:34
18650               a 2017-01-12 15:31:14
18651               a 2017-01-13 12:44:02
18652               a 2017-01-13 14:51:59
18653               a 2016-12-12 22:30:01

type(u2.iloc[-104:-96].groupby(["UPGRADESTRATEGY"]).resample('Q', on='SCENARIO_STARTDATE').size())

pandas.core.series.Series

Вывод DataFrame:

u2.iloc[-105:-96].groupby(["UPGRADESTRATEGY"]).resample('Q', on='SCENARIO_STARTDATE').size()
SCENARIO_STARTDATE  2016-12-31  2017-03-31
UPGRADESTRATEGY                           
a                            1           6
b                            1           1

Серийный выход:

u2.iloc[-104:-96].groupby(["UPGRADESTRATEGY"]).resample('Q', on='SCENARIO_STARTDATE').size()
UPGRADESTRATEGY  SCENARIO_STARTDATE
a                2016-12-31            1
                 2017-03-31            6
b                2017-03-31            1
dtype: int64

У меня нет идей!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...