Angenommen, ich habe den folgenden Datenrahmen:
Was ist der effizienteste Weg, um die Werte der Spalten feat und another_feat zu aktualisieren, wenn der Stream die Nummer 2 ist ?
Ist das alles?
for index, row in df.iterrows():
if df1.loc[index,'stream'] == 2:
# do something
UPDATE: Was tun, wenn ich mehr als 100 Spalten habe? Ich möchte die Spalten, die ich aktualisieren möchte, nicht explizit benennen. Ich möchte den Wert jeder Spalte durch 2 teilen (mit Ausnahme der Stream-Spalte).
Um klar zu sein, was mein Ziel ist:
Teilen Sie alle Werte durch 2 aller Zeilen mit Stream 2, ohne die Stream-Spalte zu ändern
100
Spalten irgendwie auswählen . zB wenn Sie100
erste Spalten benötigen , verwenden Sie diesedf.columns[:100]
und übergeben Sie sie dann anloc
.Sie können dasselbe
.ix
wie folgt tun :In [1]: df = pd.DataFrame(np.random.randn(5,4), columns=list('abcd')) In [2]: df Out[2]: a b c d 0 -0.323772 0.839542 0.173414 -1.341793 1 -1.001287 0.676910 0.465536 0.229544 2 0.963484 -0.905302 -0.435821 1.934512 3 0.266113 -0.034305 -0.110272 -0.720599 4 -0.522134 -0.913792 1.862832 0.314315 In [3]: df.ix[df.a>0, ['b','c']] = 0 In [4]: df Out[4]: a b c d 0 -0.323772 0.839542 0.173414 -1.341793 1 -1.001287 0.676910 0.465536 0.229544 2 0.963484 0.000000 0.000000 1.934512 3 0.266113 0.000000 0.000000 -0.720599 4 -0.522134 -0.913792 1.862832 0.314315
BEARBEITEN
Nach den zusätzlichen Informationen werden im Folgenden alle Spalten - in denen eine Bedingung erfüllt ist - mit halbierten Werten zurückgegeben:
>> condition = df.a > 0 >> df[condition][[i for i in df.columns.values if i not in ['a']]].apply(lambda x: x/2)
Ich hoffe das hilft!
quelle
condition = (df.a == -1.001287)
indema == -1.001287
ich erwartet habe , dass die Werte von der Zeile geteilt werden, in der ich einen leeren Datenrahmen erhalten habe.df.iloc[1,0]
. Oder stellen Sie den Wert noch besser selbst ein und versuchen Sie es erneut:df.iloc[1,0] = 1.2345; condition = df.a == 1.2345
condition = (df.a == -1.001287)
nicht?ix
ist jetzt veraltet.