2016-06-21 8 views
3

に似た機能がありますが、最初にgroupbyコールを必要としませんか?最初にgroupbyを呼び出さずにaggを呼び出す

たとえば、私はすでにaggマップが作成されていて、テーブル全体のマップを評価したいことがあります。

は、だから私は

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

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

を変更したい私は現在、偽のキーを挿入し、その上で集約することで、これを行います。しかし、それはハックです。より良い方法がありますか?

答えて

2

UPDATE:コメントで提案されている@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

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 
+1

あなたができませんでしたインデックスについて心配する必要なしに、 'np.repeat(1、len(df))'またはこれと同等のリスト理解でグループ化するだけですか? – root

+0

@root、良いキャッチ、ありがとう! – MaxU

+0

問題はありませんが、私はあなたの答えを見ずにそれを考えなかったでしょう!もう少し考えた後、おそらく 'np.repeat(0、len(df))'がやや良いかもしれないので、結果のインデックスは '1'ではなく' 0'であり、したがって通常の慣習に一貫します。 – root

関連する問題