2017-02-08 7 views
1

applyをPandasのユーザー定義関数に使用すると、pythonが追加の配列を作成しているように見えます。私はどうすればそれを取り除くことができますか?ここに私のコードです:Pandasでapplyを使用するときに余分なインデックスがある理由

def fnc(group): 
    x = group.C.values 
    out = x[np.where(x < 0)] 
    return pd.DataFrame(out) 

data = pd.DataFrame({'A':np.random.randint(1, 3, 10), 
        'B':3, 
        'C':np.random.normal(0, 1, 10)}) 

data.groupby(by=['A', 'B']).apply(fnc).reset_index() 

この奇妙なLevel_2インデックスが作成されています。私の機能を実行するときにそれを作成することを避ける方法はありますか?

A B level_2 0 
0 1 3 0  -1.054134802 
1 1 3 1  -0.691996447 
2 2 3 0  -1.068693768 
3 2 3 1  -0.080342046 
4 2 3 2  -0.181869799 
+0

あなたは: 'data [data.C <0]'の後にいますか? – MaxU

+0

あなたは何を達成しようとしていますか?それは明白ではなく、 'fnc'でDataFrameを返すのはなぜですか? –

+1

あなたの経験した結果は何ですか?また、まず第一にグループをやっていますか? –

答えて

2

このように、レベル2の表示を避ける方法はありません。これは、グループ化の結果がいくつかの項目を含むデータフレームであるためです.pandasは、これらの項目をグループ化されたキーにブロードキャストすることを願っていますが、データフレームのインデックスを追加レベルコヒーレントな出力データである。つまり、処理の終了時にlevel = -1を明示的に落とすことが期待されます。あなたは、余分なインデックスをリセット、まだいくつかの後処理を持つことがないようにしたい場合は

、別の方法は、変換を呼び出す代わりに適用され、そしてあなたがnp.nanを置くグループ全体のベクトルであることfncから返されたデータを取得することです排除する結果。その後、データフレームに余分なレベルはありませんが、その後dropna()に電話する必要があります。

関連する問題