在随时间变化的概率的数据帧中,返回值为<的第一个列名.每行5个



给定如下panda数据帧,其中列名是时间,行是每个主题,值是概率。第一次返回列名(或时间(时,数据帧中每个主题的概率小于.50。概率总是从1-0开始下降。我尝试过在数据帧中循环,但计算效率不高。

<1><2>34<5>6>6690.9931160.9761570.973078…0.1560920.15>0.9831450.964912.9580.9520.9 46995…0.1484340.1484340.9857750.9727360.9 696330.9 66116…0.170370.170370.9935980.9866410.982460.9 773710.9 728740.1545450.1545450.9955640.9899010.986941>0.9823130.9 729510.9 696450.174730.9941310.990401>0.9744940.9679410.9 618590.956636…0.1447530.1447530.9949040.9919410.9833890.9793750.9 731580.9 66358…0.1587630.1587630.9922530.979258>0.9557470.9488420.9 42899…0.1502910.150291
主题id 027670671
1 1 0.9979130.9890170.968050.963685
2 1 0.990335 0.988685
3 1 0.996231 0.9905710.9768090.1707
1 0.997129
5 1 0.9977280.96816
6 1 0.998134
7 1 0.995681
8 1 0.997541
9 10.9890640.935784

由于概率总是在下降,您可以这样做:

>>> df.set_index("subject id").gt(.98).sum(1)
subject id
1    4
2    4
3    4
4    4
5    5
6    6
7    4
8    5
9    3
dtype: int64

注意:我使用.98而不是.5,因为我只使用了一部分数据。


使用的数据

{'subject id': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9},
'0': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1},
'1': {0: 0.997913,
1: 0.990335,
2: 0.996231,
3: 0.997129,
4: 0.997728,
5: 0.998134,
6: 0.995681,
7: 0.997541,
8: 0.992253},
'2': {0: 0.993116,
1: 0.988685,
2: 0.990571,
3: 0.994417,
4: 0.993598,
5: 0.995564,
6: 0.994131,
7: 0.994904,
8: 0.989064},
'3': {0: 0.989017,
1: 0.983145,
2: 0.985775,
3: 0.991054,
4: 0.986641,
5: 0.989901,
6: 0.990401,
7: 0.991941,
8: 0.979258},
'4': {0: 0.976157,
1: 0.964912,
2: 0.976809,
3: 0.978795,
4: 0.98246,
5: 0.986941,
6: 0.974494,
7: 0.983389,
8: 0.955747},
'5': {0: 0.973078,
1: 0.958,
2: 0.972736,
3: 0.974216,
4: 0.977371,
5: 0.982313,
6: 0.967941,
7: 0.979375,
8: 0.948842},
'6': {0: 0.968056,
1: 0.952,
2: 0.969633,
3: 0.96806,
4: 0.972874,
5: 0.972951,
6: 0.961859,
7: 0.973158,
8: 0.942899},
'7': {0: 0.963685,
1: 0.946995,
2: 0.966116,
3: 0.963039,
4: 0.96816,
5: 0.969645,
6: 0.956636,
7: 0.966358,
8: 0.935784}}

如果我理解正确,我想这就是你想要的:

df.where(df.lt(.5)).idxmax(axis=1)

最新更新