python pandas如何获得多列分组结果

时间:2015-03-26 07:57:01

标签: python-2.7 pandas

我有一个pandas数据帧(名为df),如下所示:

id, a,  b,  c
1, 10, 10, 10
1, 20, 20, 20
2, 10, 10, 10
2, 20, 20, 20
3, 10, 10, 10
3, 20, 20, 20

我需要使用每个组中的多个列来获取结果。

grouped = df.groupby('id')
grouped['a','b','c'].apply(lambda x,y,z:x*y+z)

但是,第二行有错误:

KeyError: ('a', 'b', 'c').

如何获得这个?

1 个答案:

答案 0 :(得分:3)

您的尝试会引发KeyError,因为它无法像您通常认为的那样将其解析为列选择,而df.groupby('id')['a'].head()有效,df.groupby('id')['a','b'].head()也会提升一个KeyError。要选择感兴趣的列,您需要提供subsript运算符感兴趣的列的列表,如下所示:

In [163]:

df.groupby('id')[['a','b','c']].apply(lambda x: x['a']*x['b']*x['c'])
Out[163]:
id   
1   0    1000
    1    8000
2   2    1000
    3    8000
3   4    1000
    5    8000
dtype: int64

修改

为了进一步说明为什么通常按照您的方式执行列选择似乎是明智的,如果我们引用docs,我们会看到

df.groupby('id')['a']

是更详细的语法糖:

df['a'].groupby('id')

所以如果我们试试这个:

df['a','b']

这也会引发KeyError,而这不会:

df[['a','b']]