2016-10-19 4 views
3

正規化されたデータフレームを見つけると、グループ化に使用されているカラムが削除され、後続のgroupby操作では使用できなくなります。例えば(編集:更新):パンダでtransformを使用してgroupbyを使用するときに 'key'カラムを保持

df = pd.DataFrame({'a':[1, 1 , 2, 3, 2, 3], 'b':[0, 1, 2, 3, 4, 5]}) 

     a b 
    0 1 0 
    1 1 1 
    2 2 2 
    3 3 3 
    4 2 4 
    5 3 5 

    df.groupby('a').transform(lambda x: x) 

     b 
    0 0 
    1 1 
    2 2 
    3 3 
    4 4 
    5 5 

さて、グループのほとんどの操作で「行方不明」の列が新しいインデックス(当時reset_indexを使用して調整、またはas_index=Falseを設定することができます)となりますが、使用している場合は、それを変換します元のインデックスとキーなしで新しいデータセットを残して、ただ消えます。

編集:ここで私は関数は、この問題を回避するために表示されたインデックスに基づいて分割するために使用されるpandas docsからの例では

df.groupby('a').transform(lambda x: x+1).groupby('a').mean() 
    KeyError 'a' 

を行うことができるようにしたいものの1つのライナーです完全に。あるいは、groupby/transformの後にカラムを追加するだけでも可能ですが、確かに良い方法がありますか?

更新: reset_index/as_indexは、各グループを1つの行に減らす機能のみを対象としています。いくつかのオプションがあるようですが、答えは

+4

たいと思いますが、それをだまさ: 'df.assign( new = df.groupby( 'a')。transform( 'sum')) '? – MaxU

+0

全体的な問題は、 'a'を何回かグループ化する必要があるということです。 – user2699

+0

@MaxU、これは可能なアプローチのようですが、この場合は複数の列に変換を適用します。 – user2699

答えて

1

です。これはbizzareです!

私はその場で新しい__virtual__列はあなたの問題を解決追加...あなたのエンド目標は非常に明確ではありません。この

df.groupby(df.a.values).transform(lambda x: x) 

enter image description here

+1

'df.groupby(df.a.values).transform( 'sum')' – MaxU

+0

私はこれが好きです。実際の値を保持するのは変態までです(つまり、meanのような組み込みがそれを変更します)が、後続のgroupbyで同じグループを作成するために使用できます。 – user2699