2016-03-23 6 views
1

私は以下のためにPython Pandasを使用しています。私は3つのデータフレーム、df1,df2およびdf3を持っています。それぞれの次元、インデックス、列ラベルは同じです。私はdf3内の値に応じて、df1またはdf2から要素を取る第四のデータフレームを作成したいと思います:2つのデータフレームからデータを抽出して3つ目のデータを作成する

df1 = pd.DataFrame(np.random.randn(4, 2), index=list('0123'), columns=['A', 'B']) 

df1 

Out[67]: 
     A   B 
0 1.335314 1.888983 
1 1.000579 -0.300271 
2 -0.280658 0.448829 
3 0.977791 0.804459 

df2 = pd.DataFrame(np.random.randn(4, 2), index=list('0123'), columns=['A', 'B']) 
df2 
Out[68]: 
     A   B 
0 0.689721 0.871065 
1 0.699274 -1.061822 
2 0.634909 1.044284 
3 0.166307 -0.699048 

df3 = pd.DataFrame({'A': [1, 0, 0, 1], 'B': [1, 0, 1, 0]}) 
df3 
Out[69]: 
    A B 
0 1 1 
1 0 0 
2 0 1 
3 1 0 

新しいデータフレーム、df4は、同じインデックスと列のラベルを持っており、場合df1から要素を取りますdf3の対応する値は1です。 df3の対応する値が0の場合は、df2から要素を取ります。

実際の列ラベルとインデックス値ではなく、一般的な参照(例:ixまたは)を使用するソリューションが必要です。データセットには50列と400行があるからです。

答えて

1

あなたのデータフレームが数値であることを起こる、とセレクタマトリックスは、インジケータ変数であることを起こると、次の操作を行うことができます

>>> pd.DataFrame(
    df1.as_matrix() * df3.as_matrix() + df1.as_matrix() * (1 - df3.as_matrix()), 
    index=df1.index, 
    columns=df1.columns) 

私が試しましたそれは私によって、それは動作します。不思議にも、私が優れていると思う@Yakym Pirozhenkoの答えは、私にとってもうまくいきません。

+0

あなたの方法は機能します。数式の2番目の部分に小さなタイプミスがありますが、sytaxがその仕事をしています。ありがとうpd.DataFrame( df1.as_matrix()* df3.as_matrix()+ df2.as_matrix()*(1 - df3.as_matrix())、 index = df1.index、 columns = df1.columns) – Vijay

1

df4 = df1.where(df3.astype(bool), df2)とする必要があります。

import pandas as pd 
import numpy as np 

df1 = pd.DataFrame(np.random.randint(10, size = (4,2))) 
df2 = pd.DataFrame(np.random.randint(10, size = (4,2))) 
df3 = pd.DataFrame(np.random.randint(2, size = (4,2))) 
df4 = df1.where(df3.astype(bool), df2) 

print df1, '\n' 
print df2, '\n' 
print df3, '\n' 
print df4, '\n' 

出力:

0 1 
0 0 3 
1 8 8 
2 7 4 
3 1 2 

    0 1 
0 7 9 
1 4 4 
2 0 5 
3 7 2 

    0 1 
0 0 0 
1 1 0 
2 1 1 
3 1 0 

    0 1 
0 7 9 
1 8 4 
2 7 4 
3 1 2 
+0

このソリューションは、df3の値に応じてdf1とdf2から要素を抽出するのではなく、df4とdf4が同じdf2を返します。 – Vijay

+0

ブールマスクで明示的に編集しました。 –

+0

こんにちは@Yakym - それはまだ動作しません。 df4はdf2と同じです – Vijay

関連する問題