比较多个行值并根据大于/小于指定一个数字

mnemlml8  于 2021-09-08  发布在  Java
关注(0)|答案(0)|浏览(222)

因此,我得到了一个Pandas海洋表面温度异常数据框架(“ssta”),每个月(“月”,1-12)都有唯一的第90和第10百分位值(“第90”、“第10”)。一个例子如下:

monlth_data

    lat     lon      time         Month  ssta       90th         10th
0   24.125  262.375  1982-01-01     1   -0.953852   1.566498    -1.620501
1   24.125  262.375  1982-01-02     1   -0.403852   1.566498    -1.620501
2   24.125  262.375  1982-01-03     1   -0.083853   1.566498    -1.620501
3   24.125  262.375  1982-01-04     1   -0.243853   1.566498    -1.620501
4   24.125  262.375  1982-01-05     1   -0.213852   1.566498    -1.620501
... ... ... ... ... ... ... ...
7798309 30.375  273.875 2020-12-27  12  -0.139111   1.382500    -1.377530

我需要在dataframe中创建一个新列(称为“阈值”),它将基于第90和第10个值。。。。如果ssta>=第90个,则新列应包含“+1”,如果它<=第10个,则应包含“-1”,如果介于两者之间,则应包含0(都不是-1/+1)。下面是这样一个例子:

monthly_threshold

    lat     lon      time         Month  ssta       90th         10th       threshold
0   24.125  262.375  1982-01-01     1   0.000000    1.566498    -1.620501   0
1   24.125  262.375  1982-01-01     1   -2.00000    1.566498    -1.620501   -1 
2   24.125  262.375  1982-01-01     1   2.000000    1.566498    -1.620501   +1

我让它处理另一个 Dataframe ,但我只处理一个月,因此很容易将所有“ssta”列值与相同的百分位值进行比较。现在有点复杂了,因为有多个月,所以有多个百分位值。不确定这是否会受益于for循环,或者某种类型的if语句(我对此很生疏)。如有任何见解,将不胜感激!
下面我将展示我的工作内容,但同样是基于一个月(6月)的情况:

SSTA_df_copy['threshold'] = ''
SSTA_df_copy.loc[SSTA_df_copy.SSTA <= SSTA_df_copy.SSTA.quantile(.1), 'threshold'] = -1
SSTA_df_copy.loc[(SSTA_df_copy.SSTA > SSTA_df_copy.SSTA.quantile(.1)) & (SSTA_df_copy.SSTA < SSTA_df_copy.SSTA.quantile(.9)), 'threshold'] = 0
SSTA_df_copy.loc[SSTA_df_copy.SSTA >= SSTA_df_copy.SSTA.quantile(.9), 'threshold'] = 1

         lat    lon     time        day  SSTA       threshold   year
604607  28.625  274.625 2002-06-30  30  -1.463335   -1          2002
89967   28.625  267.375 2013-06-30  30   0.946152   0           2013

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题