如何访问熊猫数据框groupby对象中的数据?

时间:2018-08-28 17:49:25

标签: python pandas group-by

使用以下代码df_grouped创建。

df_grouped = df.groupby(by='Pclass')

在循环下面将打印Pclass值以及每个分组量的长度。

for val,grp in df_grouped:
    print('There were',len(grp),'people traveling in',val,'class.')

代码如何访问信息? val&grp如何在不被较早引用的情况下使用?该信息如何存储在groupby对象中?

2 个答案:

答案 0 :(得分:2)

Group By: split-apply-combine文档中所述,数据存储在GroupBy object中,这是具有特殊attributes的数据结构。

您可以自己验证:

>>> type(df_grouped)

应返回:

<class 'pandas.core.groupby.DataFrameGroupBy'>

文档中的以下代码片段很好地解释了数据的结构:

  

groups属性是一个dict,其键是计算出的唯一组,而对应的值是属于每个组的轴标签。

您注意到,您可以轻松地遍历每个单独的组。但是,通常有矢量化方法可以很好地与groupby对象配合使用,并且可以更有效,更快速地访问信息并计算事物。

答案 1 :(得分:1)

引用docs“ groups属性是一个dict,其键是计算出的唯一组,而对应的值是属于每个组的轴标签”

您可能有兴趣研究.agg(),例如:

df = pd.DataFrame([['Person A', 2, 3, 4],
                ['Person B', 3, 2, 1],
                ['Person C', 5, 7, 5],
                ['Person A', 3, 4, 9],
                ['Person C', 8, 3, 2]],
                columns=['Person','Val 1','Val 2','Val 3'])

给出以下数据框:

     Person  Val 1  Val 2  Val 3
0  Person A      2      3      4
1  Person B      3      2      1
2  Person C      5      7      5
3  Person A      3      4      9
4  Person C      8      3      2

然后做一个groupybyagg

df.groupby('Person').agg({'Val 1': 'sum', 'Val 2': 'mean', 'Val 3': 'count'})

礼物:

          Val 1  Val 2  Val 3
Person                       
Person A      5    3.5      2
Person B      3    2.0      1
Person C     13    5.0      2

您可以在此处简单地将字典传递到agg,该字典指定要在特定列的每个组上执行的操作。