【问题标题】:Capping values after a trigger level in a different variable在不同变量中的触发级别后限制值
【发布时间】:2015-06-22 16:34:19
【问题描述】:

我希望将“Original_Level”的值上限设置为另一列“NS”触发触发器的级别(在本例中为 abs(NS) >= 4 )。这个新列“Desired_Level”是在保持“Original_Level”列不变的情况下创建的。下面的 df 显示当 abs(NS) >= 4 时的上限为 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

另外说明,abs(NS) 的大小始终会从 min(abs(NS)) 级别继续增长。 . .在这种情况下,我将其设为 0.0000,但可能是零以外的一些小数字

提前感谢您的帮助

【问题讨论】:

    标签: pandas triggers


    【解决方案1】:

    你想为此使用clip,首先使用idxmaxidxmin找到你的上下剪辑值的索引,然后将这些值作为参数传递:

    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
    

    【讨论】:

    • Ed,我在我的示例数据上尝试了这个并且它有效,但是当我将它转移到我的“生产”数据时它没有。不同之处在于我对生产数据数据执行了 groupby。如果样本数据已按日期和城市分组(例如),您能否提供一些见解。再次感谢你。约翰
    • 抱歉,您正在尝试应用到 groupby 对象?拨打reset_index()后是否有效?实际上,您应该发布一个新问题,因为更改要求会丢失更改的上下文。
    • 我按照您的建议发布了,只是在此主题行末尾添加了“_after groupBy”字样
    猜你喜欢
    • 2015-09-08
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多