df_job= df2_c.groupby('所在行业').count() df2['job'] = df2['所在行业'] qldata = pd.merge(df_job,df2,left_index=True,right_on='job') qldata2 = qldata[['job','_id_x']] qldata2['知友密度(job)'] = qldata2['_id_x'] / 2626489789 def f2(df,*cols): colnames = [] for col in cols: colname = col + '_nor' df[colname] = (df[col] - df[col].min())/(df[col].max() - df[col].min())*100 colnames.append(colname) return(df,colnames)
时间: 2024-01-20 13:04:49 浏览: 22
这段代码主要是对数据进行处理和计算知友密度。首先,通过对df2_c按照所在行业进行分组并计数,生成一个名为df_job的数据框。然后,将df2中的'所在行业'列赋值给新的列'job'。接下来,使用pd.merge函数将df_job和df2按照'job'列进行合并,合并方式为左连接(left_on='job', right_index=True)。得到合并后的数据框qldata。然后,从qldata中选取'job'和'_id_x'两列,生成一个名为qldata2的新数据框。接下来,计算知友密度,即将'_id_x'列的值除以总人口数2626489789,将结果存储在新的'知友密度(job)'列中。最后,定义了一个函数f2,该函数可以传入一个数据框df和若干列名,在数据框中为每个传入的列名生成一个归一化后的新列,新列名为原列名加上'_nor'后缀,并将新列名存储在一个列表colnames中,最后返回数据框df和colnames列表。
相关问题
val survived_df = df2.filter(col("Survived") === 1) val pclass_survived_count = survived_df.groupBy("Pclass").count() val pclass_survived_percent = pclass_survived_count.withColumn("percent", format_number(col("count") .divide(sum("count").over()) .multiply(100), 5)); pclass_survived_percent.show() 中.divide(sum("count").over())用其他方式替换
如果您想使用其他方式替换 `divide(sum("count").over())`,可以考虑使用 SQL 中的窗口函数 `SUM` 和 `PARTITION BY` 子句。具体做法如下:
```
import org.apache.spark.sql.expressions.Window
val windowSpec = Window.partitionBy("Pclass")
val pclass_survived_percent = pclass_survived_count.withColumn("percent", format_number(col("count") / sum(col("count")).over(windowSpec) * 100, 5))
```
这里,我们首先定义了一个窗口规范 `windowSpec`,并使用 `partitionBy` 子句指定了窗口的分区列为 "Pclass"。然后,我们使用窗口函数 `sum` 计算每个分区内的 count 数量总和,并将结果除以该分区内所有行的 count 数量之和,得到每个分区内的百分比。最后,使用 `format_number` 函数将结果保留小数点后 5 位,并将结果存储在新的列 "percent" 中。
需要注意的是,这种做法虽然也可以计算每个组的百分比,但是相比之前的做法,多了一步窗口函数的计算,可能会导致性能上的一些损失。因此,在实际应用中,需要根据具体情况进行选择。
val survived_sex_count=df2.groupBy("Sex","Survived").count() val survived_sex_percent=survived_sex_count.withColumn("percent", format_number(col("count").divide(sum("count").over()).multiply(100),5)); survived_sex_percent.show()
这是一个使用Spark SQL进行数据处理和分析的代码片段。它首先对一个名为df2的DataFrame按照“Sex”和“Survived”两列进行分组计数,然后使用Spark SQL中的窗口函数sum()计算出count列的总和。最后,使用withColumn()方法添加一个名为“percent”的列,计算每个组的占比,并使用format_number()方法将结果格式化为小数点后5位。最终结果会展示出来。