我有这部分代码:
title = "Margin with minimal market price"
active_prods[title] = (active_prods['market min'] - active_prods['cost']) / active_prods['market min']
conditions = [
(active_prods[title] < 0),
(active_prods[title] >= 0) & (active_prods[title] <= 5),
(active_prods[title] > 5) & (active_prods[title] <= 10)]
choices = ['1) <0', '2) <=5%', '3) <=10%']
active_prods['Margin type'] = np.select(conditions, choices, default='4) >10%')
长话短说-我正在尝试计算产品利润率,并根据时间间隔的位置来指定其类型。我的代码正确设置了所有<0边距,但是所有大于或等于零的边距都设置为第二个选项:
2)<= 5%
以某种方式只接受第二个条件的第一部分(> = 0),而完全忽略了第二个条件。第三个条件也被完全忽略。为什么会这样?
Active_prods是熊猫数据框。
答案 0 :(得分:1)
假设active_prods
是一个Numpy数组,我认为您的&
对于组合逻辑数组是不正确的。
您可能想要:
np.logical_and(active_prods[title] >= 0, active_prods[title] <= 5)
答案 1 :(得分:0)
这是实现它的另一种方法。您可以使用垃圾箱并将范围切成篮子。 在下面看到样机:
import pandas as pd
active_prods = pd.DataFrame({'Margin':[0,-2,4,10,35,1,54]})
bins= [-100,0,6,11,100]
labels = ['1) <0','2) <=5%','3) <=10%','4) >10%']
active_prods['MarginType'] = pd.cut(active_prods['Margin'], bins=bins, labels=labels, right=False)
active_prods
查看以下结果:
Margin MarginType
0 0 2) <=5%
1 -2 1) <0
2 4 2) <=5%
3 9 3) <=10%
4 35 4) >10%
5 1 2) <=5%
6 54 4) >10%