我有一个熊猫数据框,其中包含数字间隔(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进行比较,但它告诉我无法比较标量和分类。
答案 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