У меня есть df
, df['period'] = (df['date1'] - df['date2']) / np.timedelta64(1, 'D')
code y_m date1 date2 period
1000 201701 2017-12-10 2017-12-09 1
1000 201701 2017-12-14 2017-12-12 2
1000 201702 2017-12-15 2017-12-13 2
1000 201702 2017-12-17 2017-12-15 2
2000 201701 2017-12-19 2017-12-18 1
2000 201701 2017-12-12 2017-12-10 2
2000 201702 2017-12-11 2017-12-10 1
2000 201702 2017-12-13 2017-12-12 1
2000 201702 2017-12-11 2017-12-10 1
, затем groupby
code
и y_m
для вычисления среднего значения date1-date2
,
df_avg_period = df.groupby(['code', 'y_m'])['period'].mean().reset_index(name='avg_period')
code y_m avg_period
1000 201701 1.5
1000 201702 2
2000 201701 1.5
2000 201702 1
но мне нравится преобразовывать df_avg_period
в матрицу, которая транспонирует столбец code
в строки и y_m
в столбцы, например
0 1 2 3
0 -1 0 201701 201702
1 0 1.44 1.44 1.4
2 1000 1.75 1.5 2
3 2000 1.20 1.5 1
-1
представляет собой фиктивное значение, которое указывает, что любое значение нене существует для конкретной ячейки code
/ y_m
или для поддержания формы матрицы;0 представляет «все» значения, которые усредняют значения code
или y_m
или code
и y_m
, например, ячейка (1,1)
усредняет значения period
для всех строк в df
;(1,2)
усредняет period
для 201701
во всех строках, которые имеют это значение для y_m
в df
.
, по-видимому, pivot_table
не может дать правильные результаты с использованием mean
.поэтому мне интересно, как этого добиться правильно?