Умножение индексов, без создания новых c выводом по условию
Как решить задание, не сходиться с ответом (ответ не знаю). Мне кажется проблема в том, что не правильно отработал с индексами, наплодил много новых, а не изменил лишь имеющиеся сто.
Вот задание:
Возведите каждое значение серии в 3 степень, а значения индекса увеличьте в 3 раза. Ответьте на следующие вопросы через запятую (без пробелов)
Выведите сумму элементов, строго меньших 2.6, имеющих нечётные значения индекса.
Выведите количество значений серии меньше нуля.
Так пробую решить:
np.random.seed(242)
d = pd.Series(data = np.random.normal(size=100))
n_i = np.arange(0,100)
n_i = n_i*3
d = d**3
d1 = pd.Series(data = d, index = n_i)
logical_results = (d1 < 2.6) & (d1.index % 2 != 0)
print(np.sum(d1[logical_results]))
logical_results = (d1 < 0)
len(d1[logical_results])
#ответ -0.23,17
Попробовал метод @MaxU ,но не сходиться с его ответом. В чем дело?
np.random.seed(242)
### Type your code here
d = pd.Series(data = np.random.normal(size=100))
d = d**3
d.index *= 3
print(d.loc[(d.index % 2 ) & (d < 2.6)].sum())
(d < 0).sum()
Ответы (1 шт):
попробуйте так:
# Возведите каждое значение серии в 3 степень
d = d**3
# значения индекса увеличьте в 3 раза
d.index *= 3
ответ 1:
In [19]: d.loc[(d.index % 2 != 0) & (d < 2.6)].sum()
Out[19]: -15.150748101821666
ответ 2:
In [143]: (d < 0).sum()
Out[143]: 51
пояснения:
(d < 0) - вернет серию значений типа bool. В Pandas, как и в Python, True - представлена значением 1, False - значением 0. Соответственно если просуммировать список / ndarray / pd.Series элементов с типом данных bool то получим число элементов со значением True.
Пример:
In [157]: np.array([False, False, False, True, True]).sum()
Out[157]: 2