加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – pandas数据框中的高效功能减少

发布时间:2020-12-20 13:37:40 所属栏目:Python 来源:网络整理
导读:我有一个大约200K样本的大数据集.每个样本都有一组来自各种约100K可能特征的特征(大约10个),以及一些浮点型测量. 例如,对于给定的数据集 Features trial observations{1,40020,8222} 4 2{1,22,16000} 14 8{1,20,1000} 1 0{42,16000} 2 1 所以我需要一个函数f
我有一个大约200K样本的大数据集.每个样本都有一组来自各种约100K可能特征的特征(大约10个),以及一些浮点型测量.

例如,对于给定的数据集

Features                  trial             observations
{1,40020,8222}          4                 2
{1,22,16000}     14                8
{1,20,1000}         1                 0
{42,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 samples in samples],index = [sample.features for samples in samples]).groupby(lambda x:x& test_features,sort = False).sum()

但表现不够好.我猜这是因为我正在为groupby使用一个函数.有没有办法优化这个?

解决方法

您可以尝试使用frozenset而不是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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读