Пример подмножество Df:Новая колонка в расчете на 1 состояния с использованием индекса и один столбец GroupBy
Category Weight Test
1/21/2017 SuperMarket 0.02 Nan
1/21/2017 SuperMarket 0.18 Nan
1/21/2017 SuperMarket 0.71 Nan
1/21/2017 Hotel 0.53 Nan
1/21/2017 Hotel 0.93 0.93
1/21/2017 Hotel 0.97 Nan
1/21/2017 Bar 0.13 Nan
1/21/2017 Bar 0.31 Nan
1/21/2017 Bar 0.96 Nan
1/21/2017 Bar 0.65 0.65
1/21/2017 Bar 0.27 0.27
1/21/2017 Bar 0.24 Nan
1/21/2017 Hospital 0.65 0.65
1/21/2017 Hospital 0.90 0.90
1/21/2017 Hospital 1.00 1.00
Новая колонка df['Adjusted_weight']
, которые будут присвоены значения на основе 3 условий:
- Если на любую дату и категория
df['Test']
содержит только Nans, тоdf['Adjusted_weight'] = df['weight']
- Если для любой даты и категории
df['Test']
содержит только значения (без Nans), тоdf['Adjusted_weight'] = df['weight']
- Наконец, если для любой даты и категории, если
df['Test']
содержит оба значения и Nans, то:
я) для того, где df['Test'] = Nan
, затем df['Adjusted_weight'] = df['weight'] * 0.5
II) Для где df['Test'] = value
, затем df['Adjusted_weight'] = df['weight'] + SUM (df['weight'] - df['adjusted_weight'])
/ number of non Nan values
номер не-Nans есть * для NaNs.
В части ii) мы увеличиваем скорректированные веса, где имеются значения, так что сумма скорректированного веса (в части 3) равна сумме весов (для конкретной даты и категории).
Пример вывода:
Category Weight Test Adjusted Weight
1/21/2017 SuperMarket 0.02 Nan 0.02
1/21/2017 SuperMarket 0.18 Nan 0.18
1/21/2017 SuperMarket 0.71 Nan 0.71
1/21/2017 Hotel 0.53 Nan 0.265
1/21/2017 Hotel 0.93 0.93 1.68
1/21/2017 Hotel 0.97 Nan 0.485
1/21/2017 Bar 0.13 Nan 0.07
1/21/2017 Bar 0.31 Nan 0.16
1/21/2017 Bar 0.96 Nan 0.48
1/21/2017 Bar 0.65 0.65 1.06
1/21/2017 Bar 0.27 0.27 0.68
1/21/2017 Bar 0.24 Nan 0.12
1/21/2017 Hospital 0.65 0.65 0.65
1/21/2017 Hospital 0.90 0.90 0.90
1/21/2017 Hospital 1.00 1.00 1.00
Пример того, как я заселена отель для 1/21/2007. Там, где есть 2 Nans и 1 значение. Так что для 2 Nans, в скорректированном весе, это было всего лишь df['weight'] * 0.5
.
Теперь, где было одно значение, это просто 0.93 + (0.53 - 0.265) + (0.97 - 0.485)
который = 1.68
.
РАЗ ДОБАВЛЕНО РАЗДЕЛ
Для примера Bar, Есть 4 значения Nan, которые df['Adjusted weight'] = 0.5* df['weight']
. Теперь для 1/21/2017 Bar есть два значения. Оба они нуждаются в весах для добавления в df ['adjust_weight'], чтобы сумма была равна df ['weight'] для 1/21/2017 Bar. Поэтому расчет равен (0,13-0,07) + (0,31-0,16) + (0,96-0,48) + (0,24-0,12) = 0,82, так как есть два значения для распределения до 0,41, будет добавлено 0,65 и 0,27, что равно 1,06 и 0,68.
У нас может быть любое количество Nans и значений, или только Nans и только значения.
Основная цель заключается в масштабировании в пределах даты и категории, где есть значения, и для обеспечения того, чтобы вес в этом поле (дата, категория) был таким же, как и раньше.
У меня много дат, и данные намного больше, чем отображаются. Благодарю.
Это категория groupby только?Существует несколько дат (требуется дата и категория данных groypby) – MysterioProgrammer91
Вы можете добавить 'pd.TimeGrouper' для группировки по дате в индексе. Кроме того, я думаю, что ваш расчет для категории Bar отключен для значений, отличных от na. –
Нет значений, я добавил к вопросу, как я рассчитываю пример для Bar для 1/21/2017. По сути, вы переносите вес в любом месте, где есть значение в тесте для конкретной даты и категории. – MysterioProgrammer91