4

我有一个大约 200K 样本的大数据集。每个样本都有一组特征(约 10 个),来自大约 100K 种可能的特征,以及一些浮点型测量。

例如,对于给定的数据集

Features                  trial             observations
{1, 40020, 8222}          4                 2
{1, 40020, 22, 16000}     14                8
{1, 20, 22, 1000}         1                 0
{42, 22, 16000}           2                 1

所以我需要一个函数 f 使得:

f(data, {1, 40020})=

Features                  trial             observations
{1, 40020}                18                10
{1}                       1                 0
{}                        2                 1

f(data, {22, 40020})=

Features                  trial             observations
{40020}                   4                 2
{40020, 22}               14                8
{22}                      3                 1

因此,函数 f 通过将特征列与给定集合相交并对聚合列求和来对数据进行分组。

考虑到我需要为具有许多不同特征集的同一数据集调用“f”作为第二个参数,因此可以进行一次以加快每次调用的任何预处理都可能是有益的。

我发现最快的方法是

pandas.DataFrame([sample.data for sample in samples], index = [sample.features for sample in samples]).groupby(lambda x: x & test_features, sort = False).sum()

但是表现还不够好。我猜这是因为我正在使用 groupby 的功能。有没有办法优化这个?

4

1 回答 1

1

您可以尝试使用frozenset而不是准备分组数据set,就像frozenset可散列一样。

首先将Features列从 a转换set为 a frozenset

df['Features'] = df['Features'].apply(frozenset)

然后这给出了您需要对数据进行分组的交集:

df['Features'] & frozenset({1, 40020})
Out[64]: 
0    (1, 40020)
1    (1, 40020)
2           (1)
3            ()

最终你得到你的数据框结果:

df.groupby(df['Features'] & frozenset({1, 40020}), sort=False).sum()
Out[65]: 
            trial  observations
Features                       
(1, 40020)     18            10
(1)             1             0
()              2             1
于 2013-10-13T21:40:03.210 回答