2016-08-03 7 views
2

Так DataFrame является:перезапись Значение в Dataframe с проверкой линии перед тем

1 28.3 
2 27.9 
3 22.4 
4 18.1 
5 15.5 
6 7.1 
7 5.1 
8 12.0 
9 15.1 
10 10.1 

Теперь я хочу, чтобы заменить все по 25 с HSE и все ниже с LSE. Все остальное - "Middle". Но я хочу знать, было ли это более 25 или ниже 8, прежде чем он получил «Средний». Так что если раньше было 25, я заменил бы значение «fHtM», и если бы он был ниже 8, я заменил бы значение «fLtM».

Благодарим вас заблаговременно.

Желаемый результат:

Может быть так:

1 S4 
2 S4 
3 S4 
4 dS3 (down to class S3) 
5 dS3 
6 dS2 
7 dS1 
8 uS2 (up to class S2) 
9 uS3 
10 dS2 

ответ

2

Вы можете использовать cut:

bins = [-np.inf, 6, 13, 19, np.inf] 
labels=['S1','S2','S3','S4'] 
df['label'] = pd.cut(df['value'], bins=bins, labels=labels) 
print (df) 
    a value label 
0 1 28.3 S4 
1 2 27.9 S4 
2 3 22.4 S4 
3 4 18.1 S3 
4 5 15.5 S3 
5 6 7.1 S2 
6 7 5.1 S1 
7 8 12.0 S2 
8 9 15.1 S3 
9 10 10.1 S2 

И если нужно добавить тенденцию использовать diff:

Разъяснение:

Сначала перейдите из колонки label вторых символов по str[1], преобразуйте ее в int номер и счет diff. Если дубликаты, вы получаете 0, поэтому их необходимо заменить на NaN и переслать на ffill().

dif = (df.label.str[1].astype(int).diff().replace(0,np.nan).ffill()) 
print (dif) 
0 NaN 
1 NaN 
2 NaN 
3 -1.0 
4 -1.0 
5 -1.0 
6 -1.0 
7 1.0 
8 1.0 
9 -1.0 
Name: label, dtype: float64 

Затем используйте numpy.where для создания u, где значение 1, d где -1 и пустая строка, если что-то еще, что добавляют к колонку label.

df['label1'] = dif.where(dif.isnull(), np.where(dif == 1.0, 'u','d')).fillna('') + df.label.astype(str) 

print (df) 
    a value label 
0 1 28.3 S4 
1 2 27.9 S4 
2 3 22.4 S4 
3 4 18.1 dS3 
4 5 15.5 dS3 
5 6 7.1 dS2 
6 7 5.1 dS1 
7 8 12.0 uS2 
8 9 15.1 uS3 
9 10 10.1 dS2 
+0

Спасибо, что у меня это было раньше. Но если я хочу сделать 4 класса, такие как s1, s2, s3, s4, и я хочу знать, было ли s3 (скажем, 15-18) раньше 15 или старше 18. Поэтому я не могу использовать isnull. – Madddin

+0

Можете ли вы добавить желаемый результат на вопрос? – jezrael

+0

См. Ниже желаемый результат – Madddin