首页 > 解决方案 > 是否有用于构建平均价格的 Python 函数,它以 2 个数组作为参数

问题描述

首先,我对 Python 完全陌生,并尝试自己学习。我得到了以下练习来练习并尝试用NumPyand来解决它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 个数组作为参数。该方法应打印出每家公司的平均股价,四舍五入到小数点后两位。上面的数组将产生:

Vodafone: £2.45
HSBC: £6.39
o2: £10.05

使用简单的ListsFor循环我得到了正确的结果,但我想处理这个问题,好像列表会更长并且不够方便,无法自己逐步键入单个值的所有位置。所以我正在寻找一个类似VLookupExcel 或类似使用的函数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))

标签: pythonpandasnumpyarraylist

解决方案


尝试使用pandasgroupby().mean()功能。我建议您在 SO 提问之前先在线阅读并玩一些时间,否则您不会学到那么多。

链接:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.mean.html

在你的情况下:

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])

df = pd.DataFrame({'shares': shares,
                   'prices': prices})

df.groupby('shares').mean()

结果是:

          prices
shares
HSBC       6.385
Vodafone   2.450
o2        10.045

推荐阅读