Swift Dataframe分组后计算均值、最值并追加列的实现方法
在Swift TabularData中按站点分组并计算多统计量(均值、最小、最大值)
要同时得到分组后的均值、最小值和最大值,你可以分别计算这三个统计量的DataFrame,再通过公共列Station合并到一起。以下是完整实现代码:
import Foundation import TabularData let station_names=["S1","S2","S3","S4","S5"] var stations:[String] = [] var values:[Double] = [] for _ in 1 ... 100 { stations.append(station_names.randomElement()!) values.append(Double.random(in: 1.0 ... 25.0)) } let df: DataFrame = ["Station": stations, "Values": values] // 按站点名称分组 let grouped_df = df.grouped(by: "Station") // 分别计算均值、最小值、最大值,并修改列名便于区分 let meanDF = grouped_df.means("Values", Double.self).rename(column: "Values_mean", to: "Mean") let minDF = grouped_df.mins("Values", Double.self).rename(column: "Values_min", to: "Min") let maxDF = grouped_df.maxs("Values", Double.self).rename(column: "Values_max", to: "Max") // 合并三个统计结果DataFrame,以Station为连接键 let finalDF = meanDF .joined(with: minDF, on: "Station") .joined(with: maxDF, on: "Station") .sorted(on: "Station") print(finalDF)
关键步骤说明:
- 分组:用
grouped(by:)方法按Station列完成分组,得到GroupedDataFrame对象 - 计算统计量:分别调用
means、mins、maxs方法获取对应统计结果,用rename修改列名避免混淆 - 合并结果:通过
joined(with:on:)方法,以Station作为公共键,将三个统计结果DataFrame合并成一个包含所有所需列的DataFrame - 排序:最后用
sorted(on:)按站点名称排序,让结果更易读
内容的提问来源于stack exchange,提问作者Rembrandt
相关产品推荐
相关产品推荐

