在Python中更改数字范围

2024-04-20 03:26:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python做SVD,我的数据索引范围是150000到160000。正因为如此,SVD变得非常资源密集。如何在保留重复数据的同时将此数据的范围更改为0-10000。你知道吗

Eg: i have consecutive data points   :150001,150001,155003,156004,157005

it should map to  :1,1,2,3,4

这样范围就缩小了,我不必交给高度稀疏的数据矩阵。你知道吗

我的主要需求是需要将(16925694534459999)等数据映射为(0,0,1,2,3,4)


Tags: to数据mapdata高度haveit矩阵
3条回答

IIUC,您可以在序列(docs)上使用rank(method='dense')

>>> df = pd.DataFrame({"a": [150001,150001,155003,156004,157005]})
>>> df
        a
0  150001
1  150001
2  155003
3  156004
4  157005
>>> df["a_rank"] = df["a"].rank(method="dense").astype(int)
>>> df
        a  a_rank
0  150001       1
1  150001       1
2  155003       2
3  156004       3
4  157005       4

以下代码按排名顺序记录数字列表中唯一数字的索引:

>>> import numpy as np
>>> v = [169,169,256,945,945,945,345,9999]
>>> np.hstack([0, np.cumsum(np.diff(v)!=0)])
array([0, 0, 1, 2, 2, 2, 3, 4])

请更新问题以反映这些要求。你知道吗

我为此写了一个小函数,希望有一个更简单的方法来做同样的事情。你知道吗

def range_minimizer():
    ind=0

    for i in d1.index:
        if i==0:
            d1['new_index']=0

        else:
            if d1['movie'][i]==d1['movie'][i-1]:
                d1['new_index'][i]=ind
            else:
                ind+=1
                d1['new_index'][i]=ind  

仅供参考我的数据如下

   user   movie  rating
0     1     169     2.5
1     1    2471     3.0
2     1   48516     5.0
3     2    2571     3.5
4     2  109487     4.0

对数据运行此函数后,我得到最终结果:

   user   movie  rating  ind
0     1     169     2.5    0
1     1    2471     3.0    1
2     1   48516     5.0    2
3     2   48516     3.5    2
4     2  109487     4.0    3

相关问题 更多 >