У меня есть pandas dataframe, который содержит числовые интервалы (pd.Interval), например, возрастные интервалы и некоторое значение, связанное с ним.Теперь, учитывая возраст, я хочу найти значение в соответствующем возрастном интервале.
Пример такого кадра данных может быть получен как
df = pd.DataFrame({
'age' : [ int(random.random()*20) for x in range(50) ],
'values' : [ random.random() for x in range(50) ]
})
df['Age10bin'] = pd.qcut(df['age'],10)
aggdf = df.groupby('Age10bin').agg({'values' : { 'Avg_values': 'mean', 'Count': 'count'}})
Avg_values Count
Age10bin
(-0.001, 1.9] 0.701276 5
(1.9, 3.0] 0.556729 6
(3.0, 6.0] 0.675447 5
(6.0, 10.0] 0.441387 7
(10.0, 11.0] 0.407906 4
(11.0, 12.0] 0.171417 4
(12.0, 14.0] 0.471452 5
(14.0, 15.0] 0.087788 5
(15.0, 17.1] 0.499927 4
(17.1, 19.0] 0.413713 5
Итак, скажем, у меня естьвозраст X: я хочу получить значения Avg_values для корзины возраста, содержащей X.
Я попробовал следующее:
aggdf.loc[ (aggdf.Age10bin.left <= X ) & ( X <= aggdf.Age10bin.right), : 'Avg_values'].max()
Но он говорит мне, что "" объект Series "не имеет атрибута 'left' "".Я также пытался сравнивать без .left или .right, но это говорит мне, что я не могу сравнить скалярное и категориальное.