使用pandas按日统计指定编码字符串对应评分均值生成新数据集的方法
高效实现方案
针对大型数据集,优先使用Pandas原生向量化操作,避免Python层循环,性能足以应对千万行级数据:
核心逻辑
- 对每个目标字符串,先筛选出
Code列包含该字符串的行 - 按日期分组计算对应行的
Ratings均值 - 合并所有字符串的计算结果,空缺值填充为
NA
完整代码
import pandas as pd # 示例输入(实际使用时替换为你的数据集读取代码即可) df1 = pd.DataFrame({ 'Date':['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-03'], 'Code':['P:346 K,329 28', 'N2:345 P239', 'P:346 K2', 'E32 345', 'Q2_325', 'P;235 K345', '2W345', 'Pq-245 3460239'], 'Ratings':[9.0, 8.0, 5.0, 3.0, 2, 3, 6, 5] }) strings = ['239', '345', '346'] # 计算每个字符串对应每日评分均值 mean_list = [] for s in strings: # regex=False关闭正则匹配,大幅提升子串检索速度 mask = df1['Code'].str.contains(s, regex=False) daily_mean = df1[mask].groupby('Date')['Ratings'].mean().rename(s) mean_list.append(daily_mean) # 合并结果,空缺值填充为NA result_df = pd.concat(mean_list, axis=1).reset_index().fillna('NA')
超大数据集优化方案
如果数据集超过内存上限,可采用分块处理:
- 读取数据时用
pd.read_csv(文件路径, chunksize=100000)按块读取 - 每个块按上述逻辑计算单块的评分总和与符合条件的行数
- 所有块处理完成后,按日期和字符串合并计算全局均值(全局均值=总评分和/总符合行数)
内容的提问来源于stack exchange,提问作者fjurt
相关产品推荐
相关产品推荐

