我希望将'Original_Level'上限的值设置为另一列'NS'触及触发器的水平(在这种情况下为abs(NS)> = 4)。创建了这个新列'Desired_Level',同时保持'Original_Level'列不变。当abs(NS)> = 4时,下面的df表示上限为13.122和50.887
In [36]:df
Out [36]:
Original_level NS Desired_Level
9.566 -8.099 13.122
10.629 -6.830 13.122
11.810 -5.655 13.122
13.122 -4.561 13.122
14.580 -3.538 14.580
16.200 -2.577 16.200
18.000 -1.670 18.000
20.000 -0.813 20.000
22.000 0.000 22.000
25.300 0.774 25.300
29.095 1.511 29.095
33.459 2.216 33.459
38.478 2.891 38.478
44.250 3.538 44.250
50.887 4.160 50.887
58.520 4.758 50.887
67.299 5.335 50.887
我正在寻找一种通用解决方案,它可以在两个方向上远离最低abs(NS)水平,同时击中-4和+4触发器。如果没有命中(它可能不是),那么所需的级别就是original_level
另外需要注意的是,从(min(NS))水平开始,abs(NS)的尺寸始终会增长。 。在这种情况下,我把它作为0.0000但可能是零以外的一些小数
提前感谢您的任何帮助
答案 0 :(得分:1)
您希望使用clip
,首先使用idxmax
和idxmin
查找上限和下限剪辑的索引,然后将这些值作为参数传递:
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