【问题标题】:Selecting Multiple Probabilities Column in Range Of .95 to.40在 0.95 到 .40 范围内选择多个概率列
【发布时间】:2020-01-30 23:06:30
【问题描述】:

对不起,如果这听起来太简单了,我是 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 到 0.40 的列。我只想保留那些满足范围的列(即我想保留满足要求的列的记录数)。

我试过过滤器

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

例如,我应该得到 1992 1994 而不是 1990 或 1991 等列。但是,我得到了很多 NaN 或其他一些选项,我只能返回满足条件的过滤行。但是,我只想保留可以获得所有 20 行的概率范围的列。

如果有人可以帮助/建议一些东西,我将不胜感激

提前致谢

【问题讨论】:

  • 仅仅一行代码是不够的。 df 中有什么内容?在df_2?请发布更多代码。在您解决问题后,其他人可能会跟进。另外,“客户(列)”是什么意思?从外观上看,他们似乎是几年?他们应该完全或部分满足范围吗?此外,您的标题非常具体地说明了一个更普遍的问题,这无助于其他人在遇到相同问题时偶然发现您的问题。
  • 不要忘记您可以投票和接受答案,请参阅What should I do when someone answers my question?。谢谢!

标签: python pandas filter multiple-columns


【解决方案1】:

您还需要DataFrame.all 来索引所有值都在该范围内的列。

请注意,df[(df &lt;= .95) &amp; (df &gt;= .4)] 将生成 True/False 的数据帧。您不能直接将 pandas 数据帧与另一个数据帧建立索引。索引将适用于行或列。因此,您需要使用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  

【讨论】:

  • 很少解释,不太可能帮助别人。也许您可以解释为什么他的方法行不通,以及为什么您的方法至少行得通。
  • 我不认为会有很多人搜索Selecting Multiple Probabilities Column in Range Of .95 to.40 这可能是一个骗局,找不到它。不过添加更多解释...@MikeMajara
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 2021-05-22
  • 1970-01-01
相关资源
最近更新 更多