将值分配给np数组中的字符串,转换为int,然后计算加权平均值

时间:2018-09-26 05:22:16

标签: python numpy

我想知道是否可以找出如何为np array中的字符串赋值,然后转换为int,然后计算加权平均值。例如,

test_np = array(['HARD', 'HARD', 'EASY', 'MODERATE', 'MODERATE', 'EASY', 'MODERATE', 'MODERATE', 'EASY', 'MODERATE', 'MODERATE', 'HARD', 'EASY'])

其中'HARD'=10'MODERATE'=5'EASY'=1是这样,所以结果应该是这样,以便我可以用np.average()计算加权平均值

test_np = array([10, 10, 1, 5, 5, 1, 5, 5, 1, 5, 5, 10, 1])

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以将test_np转换为pandas系列,并使用map将字符串转换为整数。然后,您可以取该系列的平均值

输入:

df = pd.Series(test_np)
test_dict = { 'HARD':10, 'MODERATE':5,'EASY':1}
df = df.map(test_dict)
df.mean()

df的输出:

0     10
1     10
2      1
3      5
4      5
5      1
6      5
7      5
8      1
9      5
10     5
11    10
12     1
dtype: int64

平均输出:

4.923076923076923

答案 1 :(得分:0)

带有列表理解解决方案的简单字典:

In [45]: test_np = np.array(['HARD', 'HARD', 'EASY', 'MODERATE', 'MODERATE', 'EA
    ...: SY', 'MODERATE', 'MODERATE', 'EASY', 'MODERATE', 'MODERATE', 'HARD', 'E
    ...: ASY'])
In [46]: 
In [46]: adict = {'HARD':10, 'MODERATE':5, 'EASY':1}
In [47]: np.array([adict[i] for i in test_np])
Out[47]: array([10, 10,  1,  5,  5,  1,  5,  5,  1,  5,  5, 10,  1])