Pyspark erstellt eine neue Spalte basierend auf einer anderen Spalte mit mehreren Bedingungen mit Liste oder Satz

Prabhu

Ich versuche, eine neue Spalte im pyspark-Datenrahmen zu erstellen. Ich habe folgende Daten

+------+
|letter|
+------+
|     A|
|     C|
|     A|
|     Z|
|     E|
+------+

Ich möchte eine neue Spalte basierend auf der angegebenen Spalte gemäß hinzufügen

+------+-----+
|letter|group|
+------+-----+
|     A|   c1|
|     B|   c1|
|     F|   c2|
|     G|   c2|
|     I|   c3|
+------+-----+

Es kann mehrere Kategorien mit vielen einzelnen Buchstabenwerten geben (etwa 100, die auch mehrere Buchstaben enthalten).

Ich habe das mit udf gemacht und gut gearbeitet

from pyspark.sql.functions import udf
from pyspark.sql.types import *

c1 = ['A','B','C','D']
c2 = ['E','F','G','H']
c3 = ['I','J','K','L']
...

def l2c(value):
    if value in c1: return 'c1'
    elif value in c2: return 'c2'
    elif value in c3: return 'c3'
    else: return "na"

udf_l2c = udf(l2c, StringType())
data_with_category = data.withColumn("group", udf_l2c("letter"))

Jetzt versuche ich es ohne zu tun udf. Vielleicht mit whenund col. Was ich versucht habe, folgt. Es funktioniert, aber sehr langer Code.

data_with_category = data.withColumn('group', when(col('letter') == 'A' ,'c1')
    .when(col('letter') == 'B', 'c1')
    .when(col('letter') == 'F', 'c2')
    ... 

Ich bin nicht sehr gut darin, neue Bedingungen für alle möglichen Buchstabenwerte zu schreiben. Die Anzahl der Buchstaben kann in meinem Fall sehr groß sein (ungefähr 100). Also habe ich es versucht

data_with_category = data.withColumn('group', when(col('letter') in ['A','B','C','D'] ,'c1')
    .when(col('letter') in ['E','F','G','H'], 'c2')
    .when(col('letter') in ['I','J','K','L'], 'c3')

Aber es gibt einen Fehler zurück. Wie kann ich das lösen?

Murtihash

Verwenden Sie isin .

c1 = ['A','B','C','D']
c2 =['E','F','G','H']
c3 =['I','J','K','L']

df.withColumn("group", F.when(F.col("letter").isin(c1),F.lit('c1'))\
                        .when(F.col("letter").isin(c2),F.lit('c2'))\
                        .when(F.col("letter").isin(c3),F.lit('c3'))).show()

#+------+-----+
#|letter|group|
#+------+-----+
#|     A|   c1|
#|     B|   c1|
#|     F|   c2|
#|     G|   c2|
#|     I|   c3|
#+------+-----+

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

So erstellen Sie eine neue Spalte basierend auf mehreren Bedingungen in einer anderen Spalte

Erstellen Sie eine neue Spalte basierend auf einer anderen Spalte für einen Panda-Datenrahmen mit mehreren Indizes

Erstellen Sie eine neue Spalte basierend auf einer Formel mit einer anderen Spalte

Erstellen Sie eine neue Spalte basierend auf einer teilweisen Übereinstimmung mit einer anderen Spalte

Erstellen Sie eine neue Spalte mit Funktion in Spark Dataframe basierend auf einer Zeichenfolgensuche einer anderen Spalte

Erstellen Sie eine Spalte basierend auf einer anderen Spalte, jedoch mit Bedingungen

Datenrahmen, der eine neue Spalte mit Werten erstellt, die auf den Indizes einer anderen Spalte basieren

Fügen Sie einem Datenrahmen eine neue Spalte mit mehreren Bedingungen hinzu, die auf einer Liste und einem Datenrahmen basieren

Neue Spalte basierend auf einer Zeile mit Bedingungen in Pandas

Erstellen Sie eine neue Spalte mit Werten basierend auf Bedingungen

So erstellen Sie eine neue Spalte basierend auf anderen Spalten mit if-Bedingungen in r

Erstellen Sie eine neue Spalte basierend auf anderen Spaltenwerten mit Bedingungen

Python Pandas: Erstellen Sie eine neue Spalte mit Berechnungen basierend auf kategorialen Werten in einer anderen Spalte

Erstellen Sie eine neue Spalte mit Gruppenbezeichnung basierend auf dem in einer anderen Spalte getesteten Zustand

So generieren Sie eine neue Spalte mit Werten basierend auf der Bedingung in einer anderen Spalte in Pandas

Hinzufügen einer Spalte in Pandas mit mehreren Bedingungen basierend auf anderen Spalten im Datenrahmen

SQL erstellt eine neue Spalte basierend auf einem Operanden kleiner als der Operand einer anderen Spalte

Erstellen Sie eine neue Spalte basierend auf mehreren Bedingungen in anderen Spalten in R

Erstellen Sie eine neue Spalte basierend auf mehreren Bedingungen in r

Führen Sie eine Spalte aus mehreren Datenrahmen mit einem anderen Datenrahmen zusammen, basierend auf mehreren Bedingungen in Python

Wie erstelle ich eine neue Spalte basierend auf mehreren Bedingungen über dem Fenster in pyspark?

Extrahieren Sie eine neue Teilzeichenfolge-Spalte basierend auf einer Teilzeichenfolge basierend auf Bedingungen, idealerweise mit Pandas

Liste mit eindeutigen Namen aus mehreren Spalten erstellen, basierend auf einer anderen Spalte?

Erstellen Sie eine neue Spalte mit Vektorwerten basierend auf Gruppen aus einer anderen Zeichenspalte

So fügen Sie bedingt eine neue Spalte mit einer neuen Datumszeit basierend auf einer anderen Spalte hinzu

Erstellen Sie eine neue Spalte mit einer Gruppen-ID, die sich basierend auf dem Wert einer anderen Spalte ändert

Gibt es eine Möglichkeit, eine neue Spalte basierend auf den Werten einer anderen Spalte mit dplyr in R zu erstellen?

Neue Spalte basierend auf mehreren Bedingungen

Erstellen Sie eine neue Spalte basierend auf mehreren Bedingungen einer Zeichenfolgenspalte in R