2016-12-05 9 views
0

マルチレベルのデータフレームで.locを正しく使うには? DF 'AB' を考える

A = pd.DataFrame([[1, 5, 2], [2, 4, 4], [3, 3, 1], [4, 2, 2], [5, 1, 4]], 
     columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5]) 
B = pd.DataFrame([[3, 3, 3], [2, 2, 2], [4, 4, 4], [5, 5, 5], [6, 6, 6]], 
     columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5]) 

A.columns = pd.MultiIndex.from_product([['A'], A.columns]) 
B.columns = pd.MultiIndex.from_product([['B'], B.columns]) 
AB = pd.concat([A, B], axis = 1) 

私は、列の条件[ 'B'、 'C​​']に基づいて、列レベルの '新しい' 'B' を追加したいと思います。

AB['B', 'new'] = 0 
AB.loc[AB['B', 'C'] >= 3, 'new'] = 1 

問題は、この手順では、「新しい」の代わりに列[「B」、「新しい」]を充填するDFを作成することです:私は、特にこのように、df.locを使用していますよ。

所望の出力である:

AB[('B', 'new')] = AB[('B', 'C')].ge(3).astype(int) 

結果出力:一列に、あるいは

AB[('B', 'new')] = 0 
AB.loc[AB[('B', 'C')] >= 3, ('B', 'new')] = 1 

:多値インデックス/列を参照する

A   B 
    A B C A B C new 
1 1 5 2 3 3 3 1 
2 2 4 4 2 2 2 0 
3 3 3 1 4 4 4 1 
4 4 2 2 5 5 5 1 
5 5 1 4 6 6 6 1 

答えて

1

使用タプル:

A  B   
    A B C A B C new 
1 1 5 2 3 3 3 1 
2 2 4 4 2 2 2 0 
3 3 3 1 4 4 4 1 
4 4 2 2 5 5 5 1 
5 5 1 4 6 6 6 1 
+0

クール、私は前にタプルを試しましたが、何らかの理由で私はそれが仕事をしなかったと思いました。あなたの答えのボーナスはdf.ge()について学ぶことです。ありがとう – hernanavella

関連する問題