在 numpy 数组中查找值的出现并为其分配适当的权重

Find occurrences of a value in a numpy array and assign it appropriate weights

我有一个接近 100 万的文本文件 lines.It 有 2 个 columns.Column 1 个包含 0-99 的数字,列有 4 种大小,范围为 S、M、L、XL。从 0 到 99 的数字在 100 万行中以不同的大小不断重复,如下所示:

11 S
19 S
19 M
19 M
63 L
14 S
11 L
63 XL
14 S
11 L
63 XL

我的objective是为每个数求一个最终的大小number.The行动计划是找到每个数字的出现,找到每个出现的大小,然后将最终的大小分配给数字对于尺寸的最大出现次数。

预期输出:

11 L
14 S
19 M
63 XL

由于数据集的大小,我正在看 numpy,并不是说我以前有过使用它的经验。 我已经开始创建一个基本的 numpy 数组,如下所示:

import numpy as np

data = np.loadtxt('size_data.txt')

这确实创建了一个 numpy array.However,从我到目前为止阅读的任何文档来看,它看起来不像是我想做的事情的直接方法 accomplish.Can 有人给我关于如何前进的一些指示?

我们可以通过对从文件接收到的第一列的反转版本应用 numpy.unique 来做到这一点。需要反转,因为否则它(return_index=True)将从一开始就return找到项目的第一次出现的索引。

>>> arr = np.loadtxt('foo.txt', dtype=object)
>>> _, indices = np.unique(arr[:, 0][::-1], return_index=True)
>>> arr[::-1][indices]
array([['11', 'L'],
       ['14', 'S'],
       ['19', 'M'],
       ['63', 'XL']], dtype=object)
# or
>>> arr[len(arr) - indices - 1]
array([['11', 'L'],
       ['14', 'S'],
       ['19', 'M'],
       ['63', 'XL']], dtype=object)

使用pandas。您需要 groupby(size),然后使用自定义聚合来聚合每个组,在这种情况下非常有用 collections.Counter.most_common(n=1):

import numpy as np
import pandas as pd
from collections import Counter

dat.groupby('Id').aggregate(lambda grp: Counter(grp).most_common(1)[0][0] )

   Size
Id     
11    L
14    S
19    M
63   XL