当groupby列是类别

时间:2016-06-01 09:29:25

标签: pandas

age_cleaned_titanic_df.groupby('Age_group').mean()
age_cleaned_titanic_df.groupby('Age_group').get_group((0,10])

get_group函数给出了错误,因为'Age_group'列的值是bin的半开索引。 (0,10] (10,20] ... ... (70,80)。

如何执行get_group()方法?文档和stackoverflow中的大多数示例都讨论了列值,这些列是字符串/数字,其中get_group()变得简单明了。如何在groupby列是一个类别时执行此操作?

1 个答案:

答案 0 :(得分:0)

0,10之间必须有空格 - 就像'(0, 10]'一样。

这是一个小型演示:

df = pd.DataFrame({'age': np.random.randint(10,30,20)})
df['Age_group'] = pd.cut(df.age, bins=[10, 15, 20, 25, 30])

这有效:

In [141]: df.groupby('Age_group').get_group('(10, 15]')
Out[141]:
    age Age_group
1    11  (10, 15]
6    12  (10, 15]
11   13  (10, 15]
12   14  (10, 15]
14   15  (10, 15]
15   12  (10, 15]
17   14  (10, 15]
18   13  (10, 15]

现在相同,但值之间没有空格:

In [142]: df.groupby('Age_group').get_group('(10,15]')
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-142-53b04eccd579> in <module>()
----> 1 df.groupby('Age_group').get_group('(10,15]')

...

KeyError: '(10,15]'

数据:

In [139]: df
Out[139]:
    age Age_group
0    25  (20, 25]
1    11  (10, 15]
2    27  (25, 30]
3    24  (20, 25]
4    27  (25, 30]
5    10       NaN
6    12  (10, 15]
7    20  (15, 20]
8    16  (15, 20]
9    29  (25, 30]
10   21  (20, 25]
11   13  (10, 15]
12   14  (10, 15]
13   21  (20, 25]
14   15  (10, 15]
15   12  (10, 15]
16   29  (25, 30]
17   14  (10, 15]
18   13  (10, 15]
19   19  (15, 20]