numpy 如何迭代 Dataframe 的每个概率列,并在Python中找到概率低于50%的行号

thtygnil  于 2023-04-06  发布在  Python
关注(0)|答案(1)|浏览(123)

我有一个dataframe,它是考克斯proportional model的predict_survival_function()的输出,它给出了每个月客户的生存概率(索引行号),在列中我们有客户。所以我想得到每个客户的月数,当概率低于0.50时。下面是表的屏幕截图。

我正在寻找的输出类似于下面-假设对于第一个客户**No. 4( Dataframe 中的第一列)**如果概率在第55行小于0.50。那么输出应该是

对于数据框中的所有其他列也是类似的。如有任何帮助,欢迎提供

py49o6xq

py49o6xq1#

假设下面的dataframe:

>>> df
          4         5         7
0  0.974789  0.976546  0.913151
1  0.918408  0.815823  0.909577
2  0.748928  0.801727  0.856562
3  0.691171  0.791815  0.794988
4  0.442441  0.669530  0.750395  # Customer 4, first value below 0.5 -> row 4
5  0.378585  0.568831  0.561721
6  0.285419  0.287814  0.521966  # Customer 5, first value below 0.5 -> row 6
7  0.240335  0.216207  0.176980  # Customer 7, first value below 0.5 -> row 7
8  0.191656  0.095793  0.118300
9  0.183290  0.087297  0.035063

IIUC,可以使用idxmax

>>> (df <= 0.5).idxmax()
4    4
5    6
7    7
dtype: int64

全输出:

out = ((df <= 0.5).idxmax().rename_axis('Customer Number')
                  .rename('Row Number').reset_index())
print(out)

# Output
   Customer Number  Row Number
0                4           4
1                5           6
2                7           7

相关问题