【发布时间】:2013-02-06 17:11:57
【问题描述】:
我有一个数据框,我想按特定列(或者换句话说,按特定列中的值)对它进行分组。我可以通过以下方式做到这一点:grouped = df.groupby(['ColumnName']).
我把这个操作的结果想象成一个表格,其中一些单元格可以包含一组值而不是单个值。为了得到一个普通的表格(即每个单元格只包含一个值的表格),我需要指出我想使用什么函数将单元格中的值集转换为单个值。
例如,我可以将一组值替换为它们的总和,或者它们的最小值或最大值。我可以通过以下方式做到这一点:grouped.sum() 或 grouped.min() 等等。
现在我想对不同的列使用不同的函数。我发现我可以通过以下方式做到这一点:grouped.agg({'ColumnName1':sum, 'ColumnName2':min}).
但是,由于某些原因,我无法使用first。更详细地说,grouped.first() 有效,但 grouped.agg({'ColumnName1':first, 'ColumnName2':first}) 无效。结果我得到一个 NameError:NameError: name 'first' is not defined。所以,我的问题是:为什么会发生以及如何解决这个问题。
添加
Here我找到了下面的例子:
grouped['D'].agg({'result1' : np.sum, 'result2' : np.mean})
可能我还需要使用np?但在我的情况下,python 无法识别“np”。我应该导入它吗?
【问题讨论】:
-
您不需要
np,它可以与普通的旧sum一起使用(只是效率较低)。 numpy 是用 pandas 导入的(如果你import pandas as pd是pd.np),但为了方便,大多数人也会单独导入它。