本文主要是介绍用python实现sumifs的功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用python实现sumifs的功能
缺点:运行速度特别慢
你的代码中,每次循环都在进行DataFrame的查询操作,而DataFrame的查询操作是非常耗时的。特别是在你的情况下,你正在对一个很大的DataFrame进行查询,这会导致代码运行得非常慢。
import pandas as pd def sumifs_excel(sheet1_data, sheet2_data, sum_col_names, criteria_col_names): df1 = pd.DataFrame(sheet1_data[1:], columns=sheet1_data[0]) df2 = pd.DataFrame(sheet2_data[1:], columns=sheet2_data[0]) result = [] for index, row in df2.iterrows(): criteria = {col: row[col] for col in criteria_col_names} sum_results = [] for sum_col_name in sum_col_names: filter_statement = ' & '.join(['({} == "{}")'.format(key, criteria[key]) for key in criteria]) sum_result = df1.query(filter_statement)[sum_col_name].sum() sum_results.append(sum_result) result.append(sum_results) for col, col_result in zip(sum_col_names, zip(*result)): df2[col] = col_result return df2.values.tolist() # 示例数据
sheet1 = [['店铺名称', '款号', '是否作废', '购买单价', '金额'], ['淘宝旗舰店', '71204300', '作废', 149.0, 200], ['淘宝旗舰店', '32204100', '正常', 69.0, 100], ['测试专卖店', 'B1204300', '正常', 79.0, 150], ['淘宝旗舰店', '71204300', '正常', 119.0, 200], ['淘宝旗舰店', '64204150', '正常', 129.0, 300], ['淘宝旗舰店', 'E1204250', '正常', 129.0, 300], ['唯品会(OMS发货)', '71184021', '正常', 234.0, 400], ['淘宝旗舰店', 'E1204481', '正常', 369.0, 500]] sheet2 = [['店铺名称', '是否作废'], ['淘宝旗舰店', '作废'], ['淘宝旗舰店', '正常'], ['测试专卖店', '正常'], ['唯品会(OMS发货)', '正常']] sum_cols = ['购买单价', '金额']
criteria_cols = ['店铺名称', '是否作废'] # 调用函数并打印结果
result = sumifs_excel(sheet1, sheet2, sum_cols, criteria_cols)
print(result)
这篇关于用python实现sumifs的功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!