在没有先调用groupby的情况下调用agg

时间:2016-06-21 16:06:34

标签: python pandas

是否有与agg类似的功能,首先不需要groupby来电?

例如,我经常编写一个agg映射,并且想要评估整个表的映射。

所以我想改变

data = data.groupby("key").agg({"foo1":"sum", "foo2":"mean"})

data = data.agg({"foo1":"sum", "foo2":"mean"})

我目前通过插入假密钥,然后聚合它来做到这一点。但这是一个黑客攻击。还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

更新:作为评论中提出的@root,按np.repeat(0, len(df))进行分组会更容易,更优雅:

In [5]: df.groupby(np.repeat(0, len(df))).agg({'A':'sum', 'B':'mean', 'C':'min'})
Out[5]:
      B    A   C
0  42.9  484  21

OLD回答:

假设您的数字索引始终为>= 0

In [139]: df.groupby(df.index >= 0, as_index=False).agg({'A':'sum', 'B':'mean', 'C':'min'})
Out[139]:
     A     B   C
0  484  42.9  21

或假设您的索引没有任何NaN s

In [140]: df.groupby(df.index==df.index, as_index=False).agg({'A':'sum', 'B':'mean', 'C':'min'})
Out[140]:
     A     B   C
0  484  42.9  21

如果您的索引可以使用NaN,请使用以下技巧:

In [160]: df.groupby(pd.notnull(df.index) | pd.isnull(df.index), as_index=False).agg({'A':'sum', 'B':'mean', 'C':'min'})
Out[160]:
     A     B   C
0  484  42.9  21

数据:

In [138]: df
Out[138]:
    A   B   C
0  34  45  68
1  71  62  61
2  39  51  33
3  38  62  27
4  16  39  21
5  94  41  41
6  14  11  41
7  76  40  29
8  44  34  70
9  58  44  68