基于含冗余Alias的关联列与数值列计算新列的方法
嘿,我来帮你搞定这个计算需求!结合你的场景,我整理了几种常用工具的实现方法,你可以根据自己的使用环境来选:
方法1:Excel(适合日常办公场景)
如果你的数据在Excel里,可以通过函数组合来实现:
步骤1:计算指定Time Type的总和
在空白列(比如E列,表头设为Total)的第二行输入公式:=SUMPRODUCT(($A:$A=A2)*($B:$B={"Day of Rest","Job","On"})*$C:$C)这个公式会匹配当前行的
Alias,同时筛选出Time Type为"Day of Rest"、"Job"、"On"的记录,把对应的Measure x求和。输入完成后下拉填充所有行即可。步骤2:提取当前Alias的Job值
在另一空白列(比如F列,表头设为JobValue)输入:=INDEX($C:$C, MATCH(A2&"Job", $A:$A&$B:$B, 0))这里通过拼接
Alias和Time Type来精准匹配当前Alias对应的"Job"类型的Measure x值,同样下拉填充。步骤3:计算最终结果
在目标列(比如G列,表头设为Result)输入:=F2/E2下拉后就会得到每个Alias对应的
Job值/指定类型总和的结果,比如AIBRAHIM69对应的就是7/(19+7+5)。
方法2:Python Pandas(适合数据分析场景)
如果用Python处理数据,Pandas可以高效完成批量计算:
import pandas as pd # 读取你的数据(假设是CSV格式,也可以直接从其他数据源导入) df = pd.read_csv("your_data.csv") # 定义需要纳入求和的Time Type列表 target_types = ["Day of Rest", "Job", "On"] # 1. 计算每个Alias的指定类型总和 total_by_alias = df[df["Time Type"].isin(target_types)] \ .groupby("Alias")["Measure x"].sum() \ .reset_index(name="Total") # 2. 提取每个Alias的Job类型数值 job_value_by_alias = df[df["Time Type"] == "Job"] \ [["Alias", "Measure x"]] \ .rename(columns={"Measure x": "JobValue"}) # 3. 合并数据并计算最终结果 result_df = df.merge(total_by_alias, on="Alias", how="left") \ .merge(job_value_by_alias, on="Alias", how="left") result_df["Result"] = result_df["JobValue"] / result_df["Total"] # 查看结果 print(result_df)
这段代码会先筛选目标类型的数据分组求和,再提取Job值,最后合并计算出每个行对应的结果,即使Alias有冗余重复,也能统一计算。
方法3:SQL(适合数据库存储的场景)
如果数据存在数据库里,可以用SQL查询直接得到结果,这里以MySQL为例:
-- 先用CTE计算每个Alias的总和和Job值 WITH alias_totals AS ( SELECT alias, SUM(measure_x) AS total FROM work_data WHERE time_type IN ('Day of Rest', 'Job', 'On') GROUP BY alias ), alias_job AS ( SELECT alias, measure_x AS job_value FROM work_data WHERE time_type = 'Job' ) -- 关联原表得到最终结果 SELECT w.alias, w.time_type, w.measure_x, aj.job_value, at.total, aj.job_value / at.total AS result FROM work_data w JOIN alias_totals at ON w.alias = at.alias JOIN alias_job aj ON w.alias = aj.alias;
这个查询通过公共表表达式(CTE)先预计算每个Alias的总和和Job值,再关联原表,一次性输出所有行的计算结果。
内容的提问来源于stack exchange,提问作者Ibrahim Rifai
相关产品推荐
相关产品推荐

