2016-05-30 12 views
1

In einem Python-Pandas Datenrahmen "df", habe ich die folgenden drei Säulen:Python Pandas Dataframe Bins erstellen nur für Daten, die in Schwellen

song_id | user_id | play_count 

play_count = wie oft ein Benutzer, der einen Song hörte

Ich versuche eine Spalte "Bewertung" zu dieser Tabelle basierend auf der Anzahl der Spiele hinzuzufügen. Zum Beispiel, wenn play_count = 2, ist die Bewertung niedrig wie "1".

Zuerst muss ich die Bewertungsschwelle für mein 1-10 Bewertungssystem festlegen.

df.play_count.describe() 
count 393727.000000 
mean   2.567627 
std   4.822111 
min   1.000000 
25%   1.000000 
50%   1.000000 
75%   2.000000 
max   771.000000 
Name: play_count, dtype: float64 

Die meisten der play_counts liegen zwischen 1 und 200:

pd.value_counts(pd.cut(df.play_count, bins = 10)) 
(0.23, 78] 393576 
(78, 155]  129 
(155, 232]  13 
(232, 309]   6 
(309, 386]   2 
(694, 771]   1 
(617, 694]   0 
(540, 617]   0 
(463, 540]   0 
(386, 463]   0 
dtype: int64 

I 10 Eimer erstellen möchte, mit der letzten Schaufel zu sein, dass, wenn die play_count über 200 ist, das Lied ein Rating hat von "10". Also muss ich die Schwellenwerte der anderen 9 Eimer festlegen.

Leider ist dies nicht funktioniert:

pd.value_counts(pd.cut(df[['play_count'] < 200]], bins = 9)) 
f = df[df['play_count'] < 200].hist() 
+0

Sollte nicht die erste Zeile sein 'pd.cut (df [df [ 'play_count'] <200], ...' statt 'pd.cut (df [['play_count'] <200]], ...'? – IanS

+0

Ich habe das auch versucht, es gibt mir den Fehler "ungültige Syntax". – jeangelj

Antwort

1
# get threshholds for first 9 bins 
_, bins = pd.cut(df[df.play_count < 200].play_count, bins=9,retbins=True) 

# append threshhold representing class with play_counts > 200 
new_bins = pd.np.append(bins,float(max(df.play_count))) 

# our categorized data 
out = pd.cut(df.play_count,bins=new_bins) 

# a histogram of the data with the updated bins 
df.play_count.hist(bins=new_bins) 
+0

vielen Dank! :) – jeangelj