Прежде всего, я абсолютно новичок в Python и попробую выучить это сам.Я получил следующее упражнение, чтобы попрактиковаться и попытаться решить его с помощью NumPy
и Pandas
.
Сделки с акциями записываются с использованием 2 массивов.Имя торгуемой доли входит в первый массив.Цена акции в той же позиции переходит во второй массив.Например, массивы могут выглядеть так:
String[] shares = {"HSBC","o2","Vodafone","Vodafone","HSBC","o2","Vodafone"};
double[] prices = {6.40,9.99,2.40,2.45,6.37,10.10,2.50};
Мне нужно написать метод с именем averagePrices
, который принимает 2 массива в качестве аргументов.Метод должен распечатать среднюю цену акций для каждой компании, округленную до 2 знаков после запятой.Приведенные выше массивы будут производить:
Vodafone: £2.45
HSBC: £6.39
o2: £10.05
Используя просто циклы Lists
и For
, я получаю правильные результаты, но я хочу справиться с этой проблемой, как если бы списки были длиннее и недостаточно удобны длявведите все позиции отдельных значений шаг за шагом самостоятельно.Поэтому я ищу функцию типа VLookup
в Excel или что-то подобное, используя pandas
, которая может суммировать соответствующие цены для разных акций, чтобы построить среднее значение.
import numpy as np
shares = np.array(["HSBC", "o2", "Vodafone", "Vodafone", "HSBC", "o2", "Vodafone"])
prices = np.array([6.40, 9.99, 2.40, 2.45, 6.37, 10.10, 2.50])
HSBC_bool = shares == "HSBC"
o2_bool = shares == "o2"
Vodafone_bool = shares == "Vodafone"
HSBC = shares[HSBC_bool]
o2 = shares[o2_bool]
Vodafone = shares[Vodafone_bool]
HSBC_count = HSBC.shape
o2_count = o2.shape
Vodafone_count = Vodafone.shape
HSBC_share = []
o2_share = []
Vodafone_share = []
if HSBC_bool.any == True:
HSBC_share.append(prices[:])
if o2_bool.any == True:
o2_share.append(prices[:])
if Vodafone_bool.any == True:
Vodafone_share.append(prices[:])
print(Vodafone_share)
print(o2_share)
print(HSBC_share)
avg_HSBC = sum(HSBC_share) / HSBC_count
avg_o2 = sum(o2_share) / o2_count
avg_Vodafone = sum(Vodafone_share) / Vodafone_count
print(round(avg_HSBC, 2))
print(round(avg_o2, 2))
print(round(avg_Vodafone, 2))