Pandas erstellen eine neue Spalte mit Werten aus anderen Spalten, die basierend auf dem Spaltenwert ausgewählt werden

George

Ich habe einen Datenrahmen, der ein bisschen wie dieses Beispiel aussieht. Aus bestimmten Gründen wird für die Rohdaten der Wert repliziert.

  Node Node 1 Value Node 2 Value Node 3 Value
0    1            A            B            C
1    2            A            B            C
2    3            A            B            C

Ich möchte es so umwandeln, dass es so aussieht:

  Node Value
0    1     A
1    2     B
2    3     C

Dieser iterrows Code funktioniert wie beabsichtigt, ist aber für meine Daten sehr langsam (48 Knoten mit ~ 20.000 Werten).

Ich habe das Gefühl, dass es einen schnelleren Weg geben muss, vielleicht mit, applyaber ich kann es nicht herausfinden.

import pandas as pd

df = pd.DataFrame({"Node": ["1", "2", "3"],
                   "Node 1 Value": ["A","A","A"],
                   "Node 2 Value": ["B","B","B"],
                   "Node 3 Value": ["C","C","C"]})

print(df)

for index, row in df.iterrows():
    df.loc[index, 'Value'] = row["Node {} Value".format(row['Node'])]

print(df[['Node','Value']])
Jezreel

Verwenden Sie DataFrame.lookupund dann DataFrame.assign:

a = df.lookup(df.index, "Node " + df.Node.astype(str) + " Value")

df = df[['Node']].assign(Value = a)
print (df)
   Node Value
0     1     A
1     2     B
2     3     C

BEARBEITEN: Wenn einige Werte fehlen, können Sie diese Werte numpy.setdiff1dfür das Wörterbuch mit dem Standardwert extrahieren , z. B. np.nanund zuvor zu DataFrame hinzufügen lookup:

print (df)
   Node Node 1 Value Node 2 Value Node 3 Value
0     1            A            B            C
1     2            A            B            C
3     5            A            B            C

s = "Node " + df.Node.astype(str) + " Value"
new = dict.fromkeys(np.setdiff1d(s, df.columns), np.nan)
print (new)
{'Node 5 Value': nan}

print (df.assign(**new))
   Node Node 1 Value Node 2 Value Node 3 Value  Node 5 Value
0     1            A            B            C           NaN
1     2            A            B            C           NaN
3     5            A            B            C           NaN

a = df.assign(**new).lookup(df.index, s)
print (a)
['A' 'B' nan]

df = df[['Node']].assign(Value = a)
print (df)
   Node Value
0     1     A
1     2     B
3     5   NaN

Eine andere Idee mit Definition der Suche :

def f(row, col):
    try:
        return df.at[row, col]
    except:
        return np.nan

s = "Node " + df.Node.astype(str) + " Value"
a = [f(row, col) for row, col in zip(df.index, s)]

df = df[['Node']].assign(Value = a)
print (df)
   Node Value
0     1     A
1     2     B
3     5   NaN

Und Lösung mit DataFrame.melt:

s = "Node " + df.Node.astype(str) + " Value"
b = (df.assign(Node = s)
        .reset_index()
        .melt(['index','Node'], value_name='Value')
        .query('Node == variable').set_index('index')['Value'])


df = df[['Node']].join(b)
print (df)
   Node Value
0     1     A
1     2     B
3     5   NaN

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  3. 3

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  4. 4

    Was ist schneller: SUM über NULL oder über 0?

  5. 5

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  6. 6

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  7. 7

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  8. 8

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  11. 11

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  12. 12

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  13. 13

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  14. 14

    Wie wählt man Unterschiede mit drei Tabellen aus?

  15. 15

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  16. 16

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  17. 17

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  18. 18

    Wie kann ich den Kaskadenmodus global einstellen?

  19. 19

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

  20. 20

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  21. 21

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

heißlabel

Archiv