我有一个熊猫数据框(名为 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
Run Code Online (Sandbox Code Playgroud)
我需要在每个组中使用多个列来获得结果。
grouped = df.groupby('id')
grouped['a','b','c'].apply(lambda x,y,z:x*y+z)
Run Code Online (Sandbox Code Playgroud)
但是,第二行有错误:
KeyError: ('a', 'b', 'c').
Run Code Online (Sandbox Code Playgroud)
如何得到这个?
您的尝试会引发 a ,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
Run Code Online (Sandbox Code Playgroud)
编辑
为了进一步阐明为什么按照您的方式执行列选择通常看起来很明智,如果我们参考文档,我们会看到
df.groupby('id')['a']
Run Code Online (Sandbox Code Playgroud)
是更详细的语法糖:
df['a'].groupby('id')
Run Code Online (Sandbox Code Playgroud)
所以如果我们试试这个:
df['a','b']
Run Code Online (Sandbox Code Playgroud)
这也会引发 a KeyError,而这不会:
df[['a','b']]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7702 次 |
| 最近记录: |