2017-03-08 17 views
-1

サンプル列をDとRの2つの参照列と比較しようとしています。サンプルがDまたはRと一致する場合、そのデータはDまたはRに置き換えられます。ただし、./。サンプル列にある場合は、呼び出しをNRにします。私は(./、1,0。)これらの呼び出しが代わる私の実際のデータのデータフレームにdemonstrate--するLogicCALL列を追加している私は、以下のループを構築する必要があり、この点までのnumpy条件ループnp.where

ReferenceD ReferenceR sample LogicCALL 
0   1   0  1   D 
1   1   1 ./.  NC 
2   1   0  0   R 
Index(['ReferenceD', 'ReferenceR', 'sample', 'LogicCALL'], dtype='object') 

。 Altはサンプルのリストです。ループはDとRの呼び出しではなくNCの呼び出しで動作し、代わりにスクリプトは "R"を返します。

for sample in Alt: 
     gtdata[(sample)] = np.where((gtdata[(sample)] == gtdata['ReferenceD']) & (gtdata[sample] != gtdata['ReferenceR']), "D", 
           np.where((gtdata[(sample)] == "D") & (gtdata[(sample)] is not ('\./.')), "D", 
              np.where((gtdata[(sample)] == "D") & (gtdata[(sample)].str.contains('\./.')), "NC", 
                "R"))) 
+1

私はループが表示されません。私はネストされた、または連続的な 'where'を見る。それはどれを伝えるのが難しいです。私はそれをエディタにコピーして、読みやすい部分に分けなければならないでしょう。 – hpaulj

答えて

0

それは機能的な構文ではありませんが、これを行うには、最も読みやすい方法は、手続きassignemntsを作るために次のようになります。

df.loc[df['ReferenceD'].astype(str) == df['sample'], 'LogicCALL'] = 'D' 
df.loc[df['ReferenceR'].astype(str) == df['sample'], 'LogicCALL'] = 'R' 
df.loc[df['sample'] == './.',      'LogicCALL'] = 'NR'