#python #dataframe #dictionary #multi-index
#python #фрейм данных #словарь #многоиндексный
Вопрос:
У меня есть фрейм данных, который выглядит следующим образом:
brand price
event_time
2019-10-01 00:02:14 samsung 130.76
2019-10-01 00:04:37 apple 642.69
2019-10-01 00:06:02 xiaomi 29.51
2019-10-01 00:07:07 santeri 54.42
2019-10-01 00:09:26 apple 189.91
... ... ...
2019-11-30 23:58:14 samsung 346.70
2019-11-30 23:58:22 apple 1437.02
2019-11-30 23:58:57 samsung 235.60
2019-11-30 23:59:15 polaris 89.32
И мне нужно рассчитать среднюю цену для каждого бренда и для каждого месяца, поэтому я сделал это:
sub_df = sub_df.groupby([pd.Grouper(freq='M'), 'brand'])['price'].mean()
Который выводит это:
event_time brand price
2019-10-31 a-case 4.745862
a-derma 12.360000
a-mega 114.607778
abk 11.560000
abtoys 46.310000
...
2019-11-30 zotac 272.305714
zte 79.501161
zubr 89.318436
zuru 12.840000
zvezda 11.970000
И чтобы упростить изучение данных, я хотел преобразовать все это в словарь. Проблема в том, что словарь будет иметь двойной ключ вместо того, чтобы иметь несколько уровней! Что я сделал, так это написал это:
dic_returns = sub_df.groupby(level='event_time').apply(lambda sub_df:
sub_df.xs(sub_df.name).to_dict()).to_dict()
и когда я вызываю словарь, он выдает:
{(Timestamp('2019-10-31 00:00:00'), 'a-case'): 4.745862068965517,
(Timestamp('2019-10-31 00:00:00'), 'a-derma'): 12.36,
(Timestamp('2019-10-31 00:00:00'), 'a-mega'): 114.60777777777781,
(Timestamp('2019-10-31 00:00:00'), 'abk'): 11.56,
(Timestamp('2019-10-31 00:00:00'), 'abtoys'): 46.31,
(Timestamp('2019-10-31 00:00:00'), 'acer'): 519.720941586739,
(Timestamp('2019-10-31 00:00:00'), 'achilles'): 66.06214285714287,
(Timestamp('2019-10-31 00:00:00'), 'acm'): 25.69666666666667,
(Timestamp('2019-10-31 00:00:00'), 'acme'): 48.95154761904759,
(Timestamp('2019-10-31 00:00:00'), 'acqua'): 2.96,
(Timestamp('2019-10-31 00:00:00'), 'acron'): 15.42,
(Timestamp('2019-10-31 00:00:00'), 'activision'): 45.31161290322581
Вместо этого я хотел бы иметь что-то вроде:
{2019-10-31: {'a-case': 4.745862068965517, 'a-derma': 12.36, 'a-mega': 114.60777777777781},
2019-11-30: {'a-case': 272.305714, 'a-derma': 79.501161, 'a-mega': 11.970000}}
Возможно ли это?? Причина также в том, что, поскольку у меня есть только один столбец, python преобразовал мой объект DataFrameGroupBy в серию, поэтому я не могу использовать .get_group()!!