我正在尝试用多列、聚合列和聚合运算符运行groupby。
我将把以上所有内容作为方法的参数。我必须分组:
result = df.groupby([groupByColumns])[aggColumn].agg(aggOperation)
此处
groupByColumns: clientId,state,branchId
aggColumn: amount
aggOperator: sum
但是我收到这个错误
KeyError: ''
我在熊猫方面不好。我该如何更正我的上述陈述?
如果groupByColumns
已经是一个列表,请删除groupby
:中的[]
groupByColumns = ['clientId', 'state', 'branchId']
aggColumn = 'amount'
aggOperation = sum
out = df.groupby(groupByColumns)[aggColumn].agg(aggOperation)
# OR
out = df.groupby(['clientId', 'state', 'branchId'])['amount'].sum()
print(out)
# Output
clientId state branchId
A M X 3
N Y 3
B M X 9
N Y 6
Name: amount, dtype: int64
设置:
df = pd.DataFrame({'clientId': list('AAABBB'),
'state': list('MMNMMN'),
'branchId': list('XXYXXY'),
'amount': range(1, 7)})
print(df)
# Output
clientId state branchId amount
0 A M X 1
1 A M X 2
2 A N Y 3
3 B M X 4
4 B M X 5
5 B N Y 6
groupby列需要输入参数中的1D列表。在您的情况下,您的groupByColumns是["clientId"、"state"、"branchId"],在使用groupby函数时,您使用的是list运算符,本质上使其成为长度为1的2d列表。这就是你的情况df.groupby([['clientId','state','branchId']](['amount'].sum((
解决方案根据@Corralien的回答,使用相同的命令,但不使用列表运算符,这样在groupby命令中,您将传递1d列表,它应该可以工作!