【发布时间】:2022-11-17 03:29:40
【问题描述】:
我有一个初始数据框df,看起来像这样:
+-------+---+-----+------------------+----+-------------------+
|gender| pro|share| prediction|week| forecast_units|
+------+----+-----+------------------+----+-------------------+
| Male|Polo| 0.01| 258.4054260253906| 37| 1809.0|
| Male|Polo| 0.1| 332.4026794433594| 38| 2327.0|
| Male|Polo| 0.15|425.97430419921875| 39| 2982.0|
| Male|Polo| 0.2| 508.3385314941406| 40| 3558.0|
....
我有以下代码尝试通过应用一些微积分从原始数据帧创建多个数据帧。
最初我创建了四个空数据框,然后我想循环四个不同的星期,c_weeks,并将微积分的结果保存到list_dfs 上的每个数据框:
schema = StructType([\
StructField("gender", StringType(),True), \
StructField("pro",StringType(),True), \
StructField("units_1_tpr",DoubleType(),True), \
StructField("units_1'_tpr",DoubleType(),True), \
StructField("units_15_tpr",DoubleType(),True), \
StructField("units_20_tpr",DoubleType(),True)])
df_wk1 = spark.createDataFrame([],schema=schema)
df_wk2 = spark.createDataFrame([],schema=schema)
df_wk3 = spark.createDataFrame([],schema=schema)
df_wk4 = spark.createDataFrame([],schema=schema)
list_dfs = [df_wk1, df_wk2, df_wk3, df_wk4]
c_weeks = [37, 38, 39, 40]
for data,weeknum in zip(list_dfs, campaign_weeks):
data = df.filter(df.week == weeknum).groupBy(['gender', 'pro']).pivot("share").agg(first('forecast_units'))
最后,数据帧继续为空。如何解决这个问题?如果这种方式不可能,我该如何实现我想要的?
【问题讨论】:
标签: python dataframe loops pyspark databricks