gpt4 book ai didi

python - Pandas 数据框中的高效特征缩减

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:45 25 4
gpt4 key购买 nike

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

例如,对于给定的数据集

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 使用一个函数。有没有办法优化这个?

最佳答案

您可以尝试使用 frozenset 而不是 set 来准备分组数据,因为 frozenset 是可散列的。

首先将 Features 列从 set 转换为 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

关于python - Pandas 数据框中的高效特征缩减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19342247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com