Подсчитайте дни между двумя датами в Dataframe и отсортируйте их по месяцам [duplicate]

Синтаксис callback немного нечетный в PHP. Вам нужно сделать массив. Первый элемент - это объект, а второй - метод.

call_user_func(array($player, 'SayHi'));

Вы также можете сделать это без call_user_func:

$player->{'SayHi'}();

Или:

$method = 'SayHi';
$player->$method();

1
задан black.mamba 14 May 2018 в 21:35
поделиться

1 ответ

Мне удалось отфильтровать это до моего требования показывать месяц и год, изменяя dt.month на dt.strftime

df.join(df.apply(lambda x: 
             pd.Series(pd.date_range(x.StartDate,
                                     x.EndDate,
                                     freq='D')).dt.strftime('%b-%y'),1)

      .apply(lambda x: 
             x.value_counts(),1)
      .rename(columns=dict(enumerate(calendar.month_abbr)))) 

Однако на выходе теперь перечислены столбцы в алфавитном порядке, а не в январе до декабря по порядку года.

Любые идеи о том, как достичь этого, приветствуются

Ответ Скотта Бостона

Во-первых, ваше вышесказанное, вы надеваете Вам нужно переименовать часть, потому что вы уже выполняете переименование при преобразовании в% m из серии дат.

Теперь проблема возникает с этим методом, когда вы вынимаете .dt.month, который возвращает «номер месяца», который используется для сортировки. Когда вы меняете это имя месяца использования, теперь вы делаете лексикографический вид. Итак, давайте переключимся на номер месяца (для сортировки) и сделаем небольшую лямбда-функцию для преобразования столбцов с номера месяца в имя.

df.join(df.apply(lambda x: 
             pd.Series(pd.date_range(x.StartDate,
                                     x.EndDate,
                                     freq='D')).dt.strftime('%m-%y'),1)
     .apply(lambda x: 
               x.value_counts(),1)
     .rename(columns=lambda x: 
                     pd.to_datetime(x, format='%m-%y').strftime('%b-%y')))

Выход:

             StartDate             EndDate       Days  Mar-18  Apr-18  May-18  Jun-18
0  2018-03-20 00:36:00 2018-05-01 00:42:00  42.004167    12.0    30.0     1.0     NaN
1  2018-05-01 00:42:00 2018-06-04 17:15:38  34.690023     NaN     NaN    31.0     4.0
2  2018-04-07 15:06:00 2018-05-09 17:01:00  32.079861     NaN    24.0     9.0     NaN
3  2018-03-21 04:36:00 2018-05-14 04:00:00  53.975000    11.0    30.0    13.0     NaN
4  2018-03-15 15:30:00 2018-05-08 08:30:00  53.708333    17.0    30.0     7.0     NaN
5  2018-05-08 08:30:00 2018-06-09 10:40:09  32.090382     NaN     NaN    24.0     9.0
6  2018-03-21 09:00:00 2018-05-16 13:40:00  56.194444    11.0    30.0    16.0     NaN
7  2018-03-31 06:00:00 2018-05-26 16:30:00  56.437500     1.0    30.0    26.0     NaN
8  2018-03-14 18:18:00 2018-04-27 01:00:00  43.279167    18.0    26.0     NaN     NaN
9  2018-04-07 15:00:00 2018-06-01 09:25:50  54.767940     NaN    24.0    31.0     NaN
10 2018-03-22 07:30:00 2018-05-20 19:00:00  59.479167    10.0    30.0    20.0     NaN
1
ответ дан Scott Boston 15 August 2018 в 18:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: