您可以使用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
其中value是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
謝謝你這就像我以前一樣。但是,如果我想讓s1,s2,s3,s4這樣的4個課程,並且我想知道s3(可以說是15-18)是否在15歲以下或18歲以上。所以我不能使用isnull。 – Madddin
你可以添加所需的輸出質疑嗎? – jezrael
請參閱下面的期望輸出 – Madddin