通过pd.Interval查找熊猫

时间:2019-07-11 17:37:47

标签: python pandas

我有一个熊猫数据框,其中包含数字间隔(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:我想检索包含X的年龄段的'Avg_values'。

我尝试了以下操作:

aggdf.loc[ (aggdf.Age10bin.left <= X ) & ( X <= aggdf.Age10bin.right), : 'Avg_values'].max()

但是它告诉我“”'Series'对象没有属性'left'“”“。我还尝试不使用.left或.right进行比较,但它告诉我无法比较标量和分类。

2 个答案:

答案 0 :(得分:2)

首先稍微更改创建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

答案 1 :(得分:2)

您可以简单地做到:

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

为您提供(用于random.seed(10)生成的数据):

0.3641232022211824