如何使用Python的NumPy按年份对数据进行求和聚合
用NumPy按年份聚合求和的办法
先看原始数据:
2012 $20,000 2012 $20,000 2013 $10,000 2014 $10,000 2014 $10,000
要实现按年份聚合求和得到[40000, 10000, 20000],分两步操作:
第一步:预处理数据
原始数据是字符串格式,得先拆成年份和金额字段,再把金额里的$和逗号去掉转成整数,最后转换成NumPy能处理的数组格式。
第二步:按年份分组求和
用NumPy的unique函数提取不重复的年份,再针对每个年份筛选对应金额并求和即可。
具体代码实现(两种方式可选)
方式一:用bincount高效求和(适合大数据量)
import numpy as np # 模拟原始数据,实际可从文件读取 raw_data = [ "2012 $20,000", "2012 $20,000", "2013 $10,000", "2014 $10,000", "2014 $10,000" ] # 拆分并清洗数据 years = [] amounts = [] for line in raw_data: year, amt = line.split() years.append(int(year)) # 去掉$和逗号,转成整数 clean_amt = int(amt.replace("$", "").replace(",", "")) amounts.append(clean_amt) # 转成NumPy数组 years_np = np.array(years) amounts_np = np.array(amounts) # 获取唯一年份及对应的分组索引 unique_years, group_indices = np.unique(years_np, return_inverse=True) # 按分组求和 summed = np.bincount(group_indices, weights=amounts_np) print(summed) # 输出:[40000 10000 20000]
方式二:遍历唯一年份求和(逻辑更直观)
import numpy as np # 同样的预处理步骤 raw_data = [ "2012 $20,000", "2012 $20,000", "2013 $10,000", "2014 $10,000", "2014 $10,000" ] years = [] amounts = [] for line in raw_data: year, amt = line.split() years.append(int(year)) clean_amt = int(amt.replace("$", "").replace(",", "")) amounts.append(clean_amt) years_np = np.array(years) amounts_np = np.array(amounts) # 提取不重复的年份 unique_years = np.unique(years_np) summed = [] # 遍历每个年份,筛选对应金额求和 for year in unique_years: total = amounts_np[years_np == year].sum() summed.append(total) summed = np.array(summed) print(summed) # 输出:[40000 10000 20000]
内容的提问来源于stack exchange,提问作者wRONGx
相关产品推荐
相关产品推荐

