所以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
现在,我想用HSE
替换全部超过25,用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
答案 0 :(得分:2)
您可以使用cut
:
<div class="container">
<div class="section">
<div class="text">
<b>Case 1:</b>
Gray has lower height than orange
</div>
<div class="icon">
</div>
</div>
<div class="section">
<div class="text tall">
<b>Case 2:</b>
Gray has bigger height than orange
</div>
<div class="icon">
</div>
</div>
</div>
如果需要添加趋势,请使用diff
:
解释
首先从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
列label
列中获取第二个字符,将其转换为str[1]
个数字并计算diff
。如果重复,则会收到int
,因此需要按0
替换它们,然后按NaN
转发。
ffill()
然后使用numpy.where
创建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
,其中值为u
,1
其中为d
,如果其他内容添加到列{ {1}}。
-1