2017-03-08 6 views
-1

Ich versuche, eine Beispielspalte mit zwei Referenzspalten, D und R zu vergleichen. Wenn Probe D oder R entspricht, ersetzt es diese Daten mit D oder R; es sei denn ./. ist in der Beispielspalte dann möchte ich den Anruf zu NR. Ich habe die LogicCALL Spalt hinzugefügt diese Anrufe in meinem eigentlichen Daten Datenrahmen demonstrate-- ersetzen würden (1,0, ./.)numpy Bedingung Schleife 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') 

Zu diesem Punkt, den ich die Schleife unter konstruieren habe; Wobei Alt eine Liste von Samples ist. Die Schleife funktioniert für den Aufruf von D und R's, aber nicht für NC's, stattdessen gibt das Skript "R" zurück.

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

Ich sehe keine Schleife. Ich sehe geschachtelte oder sequentielle 'where'. Es ist schwer zu sagen, welche. Ich müsste es in einen Editor kopieren und in lesbare Stücke zerlegen. – hpaulj

Antwort

0

Es ist keine funktionale Syntax aber die meisten lesbare Art und Weise, dies zu tun prozedural die assignemnts zu machen wäre:

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'