Ich habe ein Datenframe mit einer spärlich besetzten Spalte. Die meisten Werte sind leer. Die einzigen anderen Werte sind 'Kaufen' und 'Verkaufen'. Ich möchte die leeren Werte durch "long" ersetzen, wenn der letzte nicht leere Wert "Buy" oder "short" war, wenn der letzte nicht leere Wert "Sell" war. Ich kann das leicht genug in einer Schleife machen, aber ich frage mich, ob es eine nicht-schleifeweise Möglichkeit gibt, dies zu erreichen?Ersetzen von Blindwerten im Pandas-Datenrahmen
2
A
Antwort
0
können Sie verwenden fillna
oder combine_first
für ersetzen None
s durch Helfer erstellt df
mit replace
und ffill
(fillna
mit Methode ffill
- Vorwärts-Füllung NaN
s und None
e):
np.random.seed(12)
df = pd.DataFrame({'A':np.random.choice(['Buy','Sell', None], 10, p=(.2,.2,.6)),
'B':np.random.choice(['Buy','Sell', None], 10, p=(.2,.2,.6)),
'C':np.random.choice(['Buy','Sell', None], 10, p=(.2,.2,.6))})
print (df)
A B C
0 Buy Sell None
1 None None Buy
2 Sell None Buy
3 None None Buy
4 Buy Buy Sell
5 None None None
6 None None None
7 Buy None None
8 None None Sell
9 Buy Buy None
df = df.fillna(df.replace({'Sell':'short', 'Buy':'long'}).ffill())
#alternative solution
#df = df.combine_first(df.replace({'Sell':'short', 'Buy':'long'}).ffill())
print (df)
A B C
0 Buy Sell None
1 long short Buy
2 Sell short Buy
3 short short Buy
4 Buy Buy Sell
5 long long short
6 long long short
7 Buy long short
8 long long Sell
9 Buy Buy short
Erläuterung:
print (df.replace({'Sell':'short', 'Buy':'long'}))
A B C
0 long short None
1 None None long
2 short None long
3 None None long
4 long long short
5 None None None
6 None None None
7 long None None
8 None None short
9 long long None
print (df.replace({'Sell':'short', 'Buy':'long'}).ffill())
A B C
0 long short None
1 long short long
2 short short long
3 short short long
4 long long short
5 long long short
6 long long short
7 long long short
8 long long short
9 long long short
Verwandte Themen
- 1. Erstellen von Blindwerten in Schleifen Shiny R
- 2. Ersetzen Wert von Parameter im Stapel
- 3. Abfrage zum Ersetzen von Sonderzeichen im Telefonnummernfeld
- 4. Erstes Auftreten von ersetzen. im Bienenstock
- 5. Pandas: Werte im Datenframe von pivot_table ersetzen
- 6. Suchen und Ersetzen von Dateien im Verzeichnis
- 7. Regex im String ersetzen
- 8. ersetzen Zeichenfolge im Datenframe
- 9. Regex ersetzen String im Format @ ... @ .... @
- 10. Wort im Pandas Dataframe ersetzen?
- 11. Ersetzen der Indexspalte im Datenframe
- 12. Regex ersetzen im Sub Spiel
- 13. Verwenden von OpenXML zum Ersetzen von Text im Dokument
- 14. Klassen im System-Namespace ersetzen
- 15. Ausgewählten Text im Textfeld ersetzen
- 16. dynamisch ersetzen applicationId im file_paths.xml
- 17. Pandas: Spaltenwerte im Datenframe ersetzen
- 18. Ersetzen Unicode-Zeichen im Dateinamen?
- 19. Ersetzen ganze Seite im Browser
- 20. ClickHouse Ersetzen von MergeTree
- 21. Regex-Transformation oder Ersetzen von Text im Texteditor
- 22. Ersetzen von Elementen im Vektor mit Löschen und Einfügen
- 23. Ersetzen von Objektschlüsseln durch Werte im angegebenen Zeichenfolgenmuster
- 24. Wie veraltete NSWeekCalendarUnit im Kontext von UILocalNotification ersetzen?
- 25. Ersetzen von Zellenwerten im Datenrahmen basierend auf Spaltenname und Variablenübereinstimmung
- 26. Lockige Klammern {} zum Ersetzen von 'Begin' im Racket
- 27. Ersetzen von Buchstaben im EditText basierend auf einigen Regeln
- 28. Ersetzen von Text in Textdatei wird nicht im Ordner
- 29. Ersetzen Sie $ 0.00 Text im WARENKORB von wooCommerce 3.0
- 30. Suchen und Ersetzen von Datenzeilen im H2O-Fluss
Danke. Der erste Block Ihrer Antwort scheint genau das zu tun, was ich suche, wobei Buys und Sells erhalten bleiben und Leerzeichen durch Longs und Shorts ersetzt werden. In Ihrer Erklärung (Block 2) bestehen die Ergebnisse jedoch ausschließlich aus Longs und Short - dem Original Kauf und Verkauf sind weg. Wenn ich mir Ihren Code anschaue, wäre Letzteres das, was ich erwartet hätte. Wenn ich deinen Code versuche, bekomme ich den ersten - was ich wollte. Es sieht so aus, als ob ich die Buys durch Long und die Sells durch Short ersetze und dann einen Forward Fill tue. Aber warum werden die ursprünglichen Buys und Sells beibehalten? – dborger
Weil ich "df.fillna" mit dem zweiten 'df' verwende, das durch' replace' und 'ffill' erzeugt wurde. So ersetzt es die ursprünglichen 'Nones' durch Werte in der zweiten' df.'ähnlichen Funktion 'combine_first'. – jezrael