У меня есть pandas.Series, S, из объектов, где каждый объект, t, имеет несколько атрибутов, одним из которых является его длина, t.len. Я хочу создать еще одну серию SL, состоящую из тех объектов в S, которые имеют длину между 60-м и 90-м процентилем объектов в S. Каков наиболее эффективный способ кодирования этого?
Предположим, S = [t0, t1, t2, t3, t4, t5, t6, t7, t8, t9]
это серия из 10 предметов. Список их соответствующих длин: [15, 4, 10, 20, 3, 20, 13, 8, 14, 1]
. Длина 60-го процентиля равна 13,4, а длина 90-го процентиля равна 20. Тогда SL = [t0, t3, t5, t8]
Вот код, основанный на series.between, но он выдает ошибку, а именно: TypeError: индексы списка должны быть целыми числамиили ломтики, а не серии
import numpy as np
import pandas as pd
class Object:
def __init__(self, tid, length):
self.tid = tid
self.len = length
objectseries = pd.Series([Object(0, 15), Object(1, 4), Object(2, 10), Object(3, 20), Object(4, 3), Object(5, 20), Object(6, 13), Object(7, 8), Object(8, 14), Object(9, 1)])
lenseries = pd.Series(x.len for x in objectseries)
ll = np.percentile(lenseries, 60)
uu = np.percentile(lenseries, 90)
sl = lenseries.between(ll,uu)
print (sl)
objectlist = objectseries.tolist()
print (objectlist[sl])