使用字典加入vs映射以将新数据添加到Pandas/PySpark数据帧



我有一个大的数据框架,其中有一个天气列,可以取5个不同的值(晴天、多云、下雨、下雪和其他(。我必须添加另一列,其中包含更多仅取决于天气值的信息(例如,如果是晴天,则在新列中添加值x,如果是阴天,则添加值y,…(。

我想知道什么是";"更好";方法(更为"标准"的方法(。或者与具有天气列(在该列上的联接(和"天气"列的另一个小数据帧进行联接;new_ data";列(5行2列(,或者用字典映射数据帧的每一行,字典以天气值为关键字,新数据以值添加。最后一种方法的例子如下:

new_data = {"sunny": x, "cloudy": y, "rain": z, "snow": m, "other": n}
# Pandas
df["new_column"] = df["weather"].apply(lambda x: new_data[x])
# PySpark
from pyspark.sql.functions import udf, col
from pyspark.sql.types import FloatType
add_weather_data_f = udf(lambda x: new_data[x], FloatType())
df = df.withColumn("new_column", add_weather_data_f(col("weather")))

哪一个是";"更好";使用Pandas数据帧或PySpark数据帧时的方法?

此处看不到join的原因。广播会很快,但我喜欢在处理大数据时尽可能避免加入。

from pyspark.sql import functions as F
new_data=(['sunny','x'],['cloud','y'],['rain','z'],['snow','m'],['other','n'])
new_data1=(F.when(F.col('weather')==(x[0]), F.lit(x[1])) for x in new_data)
df.withColumn('new_column', F.coalesce(*new_data1)).show(truncate=False)
+-------+----------+
|weather|new_column|
+-------+----------+
|sunny  |x         |
|cloud  |y         |
|rain   |z         |
|snow   |m         |
|other  |n         |
+-------+----------+

最新更新