2015-06-21 49 views
1

我希望将'Original_Level'上限的值设置为另一列'NS'触发触发器的级别(本例中为abs(NS)> = 4)。这个新的专栏'Desired_Level'是在保留'Original_Level'列不变的情况下创建的。下面DF显示了13.122和50.887的盖子时,ABS(NS)> = 4在不同变量的触发电平之后的上限值

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触发器。如果它没有被触及(它可能不是),那么期望的水平只是原始水平

另外一个注意事项,abs(NS)将继续从min(abs(NS))的大小继续增长级别。 。 。在这种情况下,我把它当作0.0000,但可能比零

由于其他一些少数事先的任何援助

回答

1

你想用clip为此,首先找到你的上,下夹的索引使用idxmaxidxmin,然后传值,这些值作为PARAMS:

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 
+0

非常感谢你。 。工作就像一个魅力 – John

+0

埃德,我试着对我的示例数据和它的工作,但是当我把它转移到我的“生产”数据它没有。不同之处在于我对生产数据数据执行了groupby。如果样本数据按日期和城市分组(例如),您能否提供一些见解?再次感谢你。 John – John

+0

对不起,您正在尝试应用到groupby对象?调用'reset_index()'之后它是否工作?真的,你应该发布一个新的问题,因为chaining的要求失去了上下文的变化。 – EdChum

相关问题