是否有与agg
类似的功能,首先不需要groupby
来电?
例如,我经常编写一个agg映射,并且想要评估整个表的映射。
所以我想改变
data = data.groupby("key").agg({"foo1":"sum", "foo2":"mean"})
到
data = data.agg({"foo1":"sum", "foo2":"mean"})
我目前通过插入假密钥,然后聚合它来做到这一点。但这是一个黑客攻击。还有更好的方法吗?
答案 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