Выбор столбца с несколькими вероятностями в диапазоне от 0,95 до 40 - PullRequest
0 голосов
/ 01 октября 2019

Извините, если это звучит слишком просто, я новичок в Python. У меня есть фрейм данных с вероятностями для клиентов (столбцы) и дней (строки)

      1990         1991     1992        1993        1994          1995        1996        1997       1998       1999
T                                       
1.0 0.978075    0.983836    0.935958    0.945885    0.949607    0.997269    0.988535    0.951836    0.953030    0.788105
2.0 0.968136    0.976477    0.907848    0.921947    0.927251    0.996013    0.983297    0.930433    0.932138    0.706214
3.0 0.961416    0.971490    0.889165    0.905972    0.912310    0.995157    0.979741    0.916115    0.918155    0.655308
4.0 0.956860    0.968104    0.876644    0.895236    0.902257    0.994574    0.977323    0.906476    0.908738    0.622709
5.0 0.953432    0.965554    0.867303    0.887210    0.894737    0.994134    0.975500    0.899262    0.901689    0.599165
6.0 0.950307    0.963226    0.858843    0.879930    0.887912    0.993731    0.973836    0.892712    0.895288    0.578402
7.0 0.946586    0.960452    0.848843    0.871310    0.879824    0.993250    0.971851    0.884948    0.887698    0.554536
8.0 0.943850    0.958411    0.841538    0.865002    0.873903    0.992896    0.970388    0.879262    0.882139    0.537557
9.0 0.941322    0.956523    0.834828    0.859201    0.868455    0.992567    0.969036    0.874028    0.877020    0.522294


10.0    0.938503    0.954417    0.827385    0.852757    0.862400    0.992200    0.967525    0.868210    0.871330    0.505735
11.0    0.935750    0.952358    0.820161    0.846494    0.856511    0.991841    0.966048    0.862549    0.865793    0.490026
12.0    0.933141    0.950405    0.813354    0.840584    0.850952    0.991499    0.964646    0.857204    0.860564    0.475550
13.0    0.930858    0.948695    0.807425    0.835431    0.846103    0.991199    0.963417    0.852540    0.855999    0.463197
14.0    0.929073    0.947358    0.802812    0.831417    0.842324    0.990965    0.962456    0.848905    0.852442    0.453746
15.0    0.927366    0.946078    0.798416    0.827588    0.838718    0.990740    0.961535    0.845435    0.849046    0.444869
16.0    0.925786    0.944893    0.794362    0.824054    0.835389    0.990531    0.960683    0.842231    0.845910    0.436796
17.0    0.924440    0.943883    0.790920    0.821052    0.832560    0.990354    0.959956    0.839508    0.843244    0.430024
18.0    0.923308    0.943033    0.788032    0.818531    0.830184    0.990204    0.959345    0.837221    0.841006    0.424403
19.0    0.922105    0.942130    0.784970    0.815857    0.827663    0.990045    0.958694    0.834794    0.838629    0.418500
20.0    0.921186    0.941439    0.782637    0.813818    0.825740    0.989923    0.958197    0.832942    0.836816    0.414041

Я хочу отфильтровать только столбцы, где у меня есть вероятности менее 0,95 до 40. Я хочу сохранить только те столбцы, которые соответствуют диапазону (т. Е. Я хочу сохранить количество записей в столбцах, отвечающих требованиям).

Я пробовал фильтр

df_2 = df[(df <= .95) & (df >= .4)]

Например, я долженполучить столбцы 1992, 1994, а не 1990 или 1991 и так далее. Тем не менее, я получаю много NaN или с некоторыми другими опциями, я только возвращаю фильтрованные строки, удовлетворяющие условию. Однако я хочу сохранить только столбцы, в которых я могу получить диапазон вероятностей для всех 20 строк.

Буду признателен, если кто-нибудь сможет помочь / предложить что-нибудь, чтобы получить

Заранее спасибо

1 Ответ

1 голос
/ 01 октября 2019

Вам также необходимо DataFrame.all для индексации столбцов, в которых все значения находятся в пределах диапазона.

Обратите внимание, что df[(df <= .95) & (df >= .4)] создаст кадр данных True / False. Вы не можете напрямую индексировать пандас с другим. Индексирование будет работать как для строк, так и для столбцов. Таким образом, вам нужно сократить до одного измерения с помощью all, которое будет True, где все строки удовлетворяют условию, или False в противном случае:

df.loc[:,(df.gt(0.4) & df.lt(0.95)).all(0)]

      1992      1993      1994      1999
1.0  0.935958  0.945885  0.949607  0.788105
2.0  0.907848  0.921947  0.927251  0.706214
3.0  0.889165  0.905972  0.912310  0.655308
4.0  0.876644  0.895236  0.902257  0.622709
5.0  0.867303  0.887210  0.894737  0.599165
6.0  0.858843  0.879930  0.887912  0.578402
7.0  0.848843  0.871310  0.879824  0.554536
8.0  0.841538  0.865002  0.873903  0.537557
9.0  0.834828  0.859201  0.868455  0.522294

Для ввода образца -

print(df)

       1990      1991      1992      1993      1994      1995      1996  \
1.0  0.978075  0.983836  0.935958  0.945885  0.949607  0.997269  0.988535   
2.0  0.968136  0.976477  0.907848  0.921947  0.927251  0.996013  0.983297   
3.0  0.961416  0.971490  0.889165  0.905972  0.912310  0.995157  0.979741   
4.0  0.956860  0.968104  0.876644  0.895236  0.902257  0.994574  0.977323   
5.0  0.953432  0.965554  0.867303  0.887210  0.894737  0.994134  0.975500   
6.0  0.950307  0.963226  0.858843  0.879930  0.887912  0.993731  0.973836   
7.0  0.946586  0.960452  0.848843  0.871310  0.879824  0.993250  0.971851   
8.0  0.943850  0.958411  0.841538  0.865002  0.873903  0.992896  0.970388   
9.0  0.941322  0.956523  0.834828  0.859201  0.868455  0.992567  0.969036   

         1997      1998      1999  
1.0  0.951836  0.953030  0.788105  
2.0  0.930433  0.932138  0.706214  
3.0  0.916115  0.918155  0.655308  
4.0  0.906476  0.908738  0.622709  
5.0  0.899262  0.901689  0.599165  
6.0  0.892712  0.895288  0.578402  
7.0  0.884948  0.887698  0.554536  
8.0  0.879262  0.882139  0.537557  
9.0  0.874028  0.877020  0.522294  
...