Поиск панд по pd.Interval - PullRequest
0 голосов
/ 11 июля 2019

У меня есть 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, но это говорит мне, что я не могу сравнить скалярное и категориальное.

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Вы можете просто сделать:

aggdf.loc[19, ('values', 'Avg_values')]

, который дает вам (для данных, генерируемых random.seed(10)):

0.3641232022211824
2 голосов
/ 11 июля 2019

Сначала немного измените способ создания aggdf, чтобы убедиться, что в columns

aggdf = df.groupby('Age10bin')['values'].agg({ 'Avg_values': 'mean', 'Count': 'count'})

нет кратного индекса. Затем мы используем .loc

aggdf.loc[10]
Out[378]: 
Avg_values    0.548805
Count         5.000000
Name: (9.3, 12.2], dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...