【发布时间】:2013-06-03 05:48:50
【问题描述】:
我正在使用 pandas DataFrame,其中一列包含 numpy 数组。当尝试通过聚合对该列求和时,我收到一条错误消息,指出“必须生成聚合值”。
例如
import pandas as pd
import numpy as np
DF = pd.DataFrame([[1,np.array([10,20,30])],
[1,np.array([40,50,60])],
[2,np.array([20,30,40])],], columns=['category','arraydata'])
这符合我的预期:
DF.groupby('category').agg(sum)
输出:
arraydata
category 1 [50 70 90]
2 [20 30 40]
但是,由于我的真实数据框有多个数字列,因此未选择 arraydata 作为默认列进行聚合,我必须手动选择它。这是我尝试过的一种方法:
g=DF.groupby('category')
g.agg({'arraydata':sum})
这是另一个:
g=DF.groupby('category')
g['arraydata'].agg(sum)
两者都给出相同的输出:
Exception: must produce aggregated value
但是,如果我有一列使用数字而不是数组数据,它就可以正常工作。我可以解决这个问题,但这很令人困惑,我想知道这是一个错误,还是我做错了什么。我觉得在这里使用数组可能有点边缘情况,并且确实不确定它们是否受支持。想法?
谢谢
【问题讨论】:
-
在风格上,全大写的变量名通常表示“常量”变量(大写/驼峰式命名往往是为类保留的)。使用 pythonic 风格会让其他人更容易阅读你的代码 - PEP8 has guidelines on this.
-
请注意,这仅适用于 2017 年。
-
@Ieezu 会不会在 2021 年再次停止工作?
标签: python numpy pandas aggregation