给定如下panda数据帧,其中列名是时间,行是每个主题,值是概率。第一次返回列名(或时间(时,数据帧中每个主题的概率小于.50。概率总是从1-0开始下降。我尝试过在数据帧中循环,但计算效率不高。
主题id | 0 | <1><2>34<5>6>2 | 7 | … | 669670 | 671 |
---|---|---|---|---|---|---|
1 | 1 | 0.997913 | 0.9931160.989017 | 0.9761570.9730780.96805 | 0.963685 | …0.1560920.15|
2 | 1 | 0.990335 | 0.988685 | >0.9831450.964912.9580.9520.9 46995…0.1484340.148434|||
3 | 1 | 0.996231 | 0.990571 | 0.9857750.976809 | 0.9727360.9 696330.9 66116…0.170370.170370.1707 | |
1 | 0.997129 | |||||
5 | 1 | 0.997728 | 0.9935980.9866410.982460.9 773710.9 728740.96816 | … | 0.1545450.154545||
6 | 1 | 0.998134 | 0.9955640.9899010.986941>0.9823130.9 729510.9 696450.17473||||
7 | 1 | 0.995681 | 0.9941310.990401>0.9744940.9679410.9 618590.956636…0.1447530.144753||||
8 | 1 | 0.997541 | 0.9949040.9919410.9833890.9793750.9 731580.9 66358…0.1587630.158763||||
9 | 1 | 0.9922530.989064 | 0.979258>0.9557470.9488420.9 428990.935784 | …0.1502910.150291
由于概率总是在下降,您可以这样做:
>>> 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)