2016-05-13 14 views
0

Ich mache SVD in Python, der Bereich meines Datenindex ist 150.000 bis 160.000. Aus diesem Grund wird SVD sehr ressourcenintensiv. Wie kann ich den Bereich dieser Daten auf 0-10.000 ändern, während Duplikate beibehalten werden?Ändern der Anzahl der Zahlen in Python

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

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

Derart, dass der Bereich schrumpft, und i dont ein higly spärlichen Daten martrix geben muß.

Meine primäre Anforderung ist, dass ich wie (169,169,256,945,3445,9999), um Daten benötigen verwandelt sich in (0,0,1,2,3,4)

+4

Es klingt wie die Antwort hier ist nur "subtrahieren 150000". Wenn Sie Hilfe beim Subtrahieren von 150000 benötigen, müssen wir mehr Kontext sehen. – user2357112

+0

Als user2357112 erwähnt: 'remapped_data = [num-150000 für num in data]' –

+0

Scipy hat spärliche Matrixfunktionen. – davo36

Antwort

1

Der folgende Code zeichnet die Indizes der eindeutigen Zahlen in der Liste von Zahlen in Rangfolge:

>>> 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]) 

Bitte die Frage aktualisieren, um diese Anforderungen zu reflektieren.

0

ich eine kleine Funktion für dieses schrieb, Ich hoffe, es gibt einen einfacheren Weg, das Gleiche zu tun.

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 

FYI sieht meine Daten wie diese

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 

Nach dem Ausführen dieser Funktion auf die Daten i das Endergebnis erhalten:

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 
+0

Huh? Hat das etwas mit deiner Frage zu tun? Wo ist das 150001 Zeug? – mwm314

+0

Ich gebe Ihnen ein weiteres Beispiel meiner Daten. Obwohl die Daten unterschiedlich sind, bleibt der Punkt derselbe. –

+0

Warum hat sich die Filmsäule geändert? Wolltest du das machen? – mwm314

1

IIUC Sie rank(method='dense') auf einer Serie verwenden könnte (docs) :

>>> 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 
+0

danke. es hat gut funktioniert. –

Verwandte Themen