Pandas 在不同变量中设置触发器级别后的上限值

Pandas 在不同变量中设置触发器级别后的上限值,pandas,triggers,Pandas,Triggers,我希望将“原始水平”上限的值设置为另一列“NS”触发的水平(在本例中,abs(NS)>=4)。此新列“所需的_级别”是在保持“原始_级别”列不变的情况下创建的。当abs(NS)>=4时,下面的df显示了13.122和50.887的上限 我正在寻找一个通用的解决方案,它可以在两个方向上远离最低的abs(NS)水平,同时触发-4和+4触发器。若它并没有命中(可能并没有),那个么所需的级别只是原始的_级别 另外要注意的是,abs(NS)的尺寸从最小值(abs(NS))继续增长。在这种情况下,我把它设为

我希望将“原始水平”上限的值设置为另一列“NS”触发的水平(在本例中,abs(NS)>=4)。此新列“所需的_级别”是在保持“原始_级别”列不变的情况下创建的。当abs(NS)>=4时,下面的df显示了13.122和50.887的上限

我正在寻找一个通用的解决方案,它可以在两个方向上远离最低的abs(NS)水平,同时触发-4和+4触发器。若它并没有命中(可能并没有),那个么所需的级别只是原始的_级别

另外要注意的是,abs(NS)的尺寸从最小值(abs(NS))继续增长。在这种情况下,我把它设为0.0000,但可能是一些小数字,而不是零

提前感谢您为此提供的任何帮助

首先使用查找上下剪辑值的索引,然后将这些值作为参数传递:

In [14]:
clip = 4
lower = df.loc[df['NS'] <= -clip, 'Original_level'].idxmax()
upper = df.loc[df['NS'] >= clip, 'Original_level'].idxmin()
df['Original_level'] = df['Original_level'].clip(df.loc[lower, 'Original_level'], df.loc[upper, 'Original_level'])
df

Out[14]:
    Original_level     NS  Desired_Level
0           13.122 -8.099         13.122
1           13.122 -6.830         13.122
2           13.122 -5.655         13.122
3           13.122 -4.561         13.122
4           14.580 -3.538         14.580
5           16.200 -2.577         16.200
6           18.000 -1.670         18.000
7           20.000 -0.813         20.000
8           22.000  0.000         22.000
9           25.300  0.774         25.300
10          29.095  1.511         29.095
11          33.459  2.216         33.459
12          38.478  2.891         38.478
13          44.250  3.538         44.250
14          50.887  4.160         50.887
15          50.887  4.758         50.887
16          50.887  5.335         50.887
[14]中的

夹子=4
lower=df.loc[df['NS']=clip'Original_level'].idxmin()
df['Original_level']=df['Original_level'].clip(df.loc[下,'Original_level'],df.loc[上,'Original_level']))
df
出[14]:
原始\u级别NS所需\u级别
0           13.122 -8.099         13.122
1           13.122 -6.830         13.122
2           13.122 -5.655         13.122
3           13.122 -4.561         13.122
4           14.580 -3.538         14.580
5           16.200 -2.577         16.200
6           18.000 -1.670         18.000
7           20.000 -0.813         20.000
8           22.000  0.000         22.000
9           25.300  0.774         25.300
10          29.095  1.511         29.095
11          33.459  2.216         33.459
12          38.478  2.891         38.478
13          44.250  3.538         44.250
14          50.887  4.160         50.887
15          50.887  4.758         50.887
16          50.887  5.335         50.887

Ed,我在我的示例数据上尝试了这一点,但当我将其转移到我的“生产”数据时,却没有成功。不同之处在于我对生产数据执行了groupby。如果样本数据已按日期和城市分组(例如),您能否提供一些见解。再次感谢你。JohnSorry您试图应用于groupby对象?调用
reset\u index()
后它是否工作?真的,你应该发布一个新问题,因为更改需求会失去更改的上下文。我按照你的建议发布,只是在主题行的末尾添加了“\u after groupBy”
In [14]:
clip = 4
lower = df.loc[df['NS'] <= -clip, 'Original_level'].idxmax()
upper = df.loc[df['NS'] >= clip, 'Original_level'].idxmin()
df['Original_level'] = df['Original_level'].clip(df.loc[lower, 'Original_level'], df.loc[upper, 'Original_level'])
df

Out[14]:
    Original_level     NS  Desired_Level
0           13.122 -8.099         13.122
1           13.122 -6.830         13.122
2           13.122 -5.655         13.122
3           13.122 -4.561         13.122
4           14.580 -3.538         14.580
5           16.200 -2.577         16.200
6           18.000 -1.670         18.000
7           20.000 -0.813         20.000
8           22.000  0.000         22.000
9           25.300  0.774         25.300
10          29.095  1.511         29.095
11          33.459  2.216         33.459
12          38.478  2.891         38.478
13          44.250  3.538         44.250
14          50.887  4.160         50.887
15          50.887  4.758         50.887
16          50.887  5.335         50.887