Я пытаюсь заполнить столбец данных «Классификация» строк строками, указывающими, находится ли значение в пределах 200 самых низких или 200 самых высоких значений столбца с именем «Valence_mean».
Итак, еслизначение ячейки в столбце «Valence_mean» находится в 200 самых низких значениях значений столбца, метка в ячейке столбца «Классификация» той же строки должна быть «Low_Valence».В противном случае, если значение ячейки в столбце «Valence_mean» находится в 200 максимальных значениях соответствующей ячейки столбца «Классификация», должно быть «high_valence».
df.head ()
Out[31]:
Unnamed: 0 Theme Category Source Valence_mean Valence_SD \
0 I1 Acorns 1 Object Pixabay 4.686275 0.954203
1 I2 Acorns 2 Object Pixabay 4.519608 0.841150
2 I3 Acorns 3 Object Pixabay 4.754902 0.958921
3 I4 Alcohol 1 Object Pixabay 4.685185 1.189111
4 I5 Alcohol 2 Object Pixabay 4.250000 1.136686
Valence_N Arousal_mean Arousal_SD Arousal_N
0 102 2.346535 1.602720 101
1 102 2.227723 1.399151 101
2 102 2.306931 1.514877 101
3 108 2.865385 1.695555 104
4 108 3.000000 1.700942 104
df['Classification'] = ''
Я пытаюсь сначала закодировать каждую ячейку столбца «Классификация», как «Low_Valence», если она находится в списке из 200 самых маленьких строк «Valence_mean».
df.loc[df.Valence_mean in df.nsmallest(200, 'Valence_mean'), ['Classification']] = 'Low_Valence'
Я также пытался:
if df.Valence_mean.isin(df.nsmallest(200, 'Valence_mean')):
df['Classification'] = 'Low_Valence'
if df.Valence_mean.isin(df.largest(200, 'Valence_mean')):
df['Classification'] = 'Low_Valence'
Приведенные выше коды генерируют ошибку.Интересно, есть ли лучший способ сделать это?
Это решение работает, но мне интересно, есть ли что-то более элегантное:
small_Valence_df = df.nsmallest(200, 'Valence_mean')
high_Valence_df = df.nlargest(200, 'Valence_mean')
small_Valence_df['Classification'] = 'Low_Valence'
high_Valence_df['Classification'] = 'High_Valence'
frames = [small_Valence_df, high_Valence_df]
valence_df = pd.concat(frames)
valence_df.head()