python - 优化 pandas 数据框中子集的汇总和其他向量操作
问题描述
我有一个很大的数据表,其中包含几个类别。类别名称存储在列表中,每个类别也有多个子类别,这些子类别也存储在列表中,所有内容都存储在 pandas 数据框中。我想在这个数据集上执行基本计算,例如总和、最大值和平均值,当我每次将整个数据帧过滤为子数据帧时,只使用我需要的列,然后对其执行操作并将其存储在字典中。完成后,我从 dict 构造数据帧并将两个数据帧合并为一个。我的代码有效,但对于大数据集和大类别列表来说非常慢,我想知道是否有更有效的方法来做事。
这是我写的。(实际列表不同,但规则保持不变:每个类别都是字符串,所有子类别都是类别名称 + '.' + 数字)
import pandas as pd
import numpy as np
import string
import time
categories = list(string.ascii_lowercase)
column_names = [letter + '.' + str(number) for letter in categories for number in range(10000)]
rand_matrix = np.random.rand(1000,len(column_names)).astype('float32')
dataframe = pd.DataFrame(rand_matrix, columns = column_names )
# calculate sum of by letter:
tic = time.perf_counter() # start timer
func_dict = {}
for letter in categories:
func_dict[letter + '.SUM'] = dataframe.loc[:, dataframe.columns.str.startswith(letter +'.')].sum(axis =1)
func_dict[letter + '.MAX'] = dataframe.loc[:, dataframe.columns.str.startswith(letter +'.')].max(axis =1)
func_dict[letter + '.AVG'] = dataframe.loc[:, dataframe.columns.str.startswith(letter +'.')].mean(axis =1)
funct_frame = pd.DataFrame.from_dict(func_dict)
final_frame = pd.concat((dataframe,funct_frame), axis =1)
toc = time.perf_counter() # end timer
print(f'Load and process data is : {toc - tic:0.4f} seconds')
输出是:
Load and process data is : 11.8811 seconds
解决方案
推荐阅读
- html - 在 Firefox 上按下退格键时,可编辑 div 中的空 HTML 标记消失
- sql - 在 Spark SQL 中使用 COUNT 和 GROUP BY
- c++ - 如何通过 CMakeLists.txt 中的命令输出替换文件字符串
- php - 将 Laravel Websocker 与 docker/docker-compose.yml 一起使用不起作用
- django - R 未找到“结果”的反向。“结果”不是有效的视图函数或模式名称
- java - Spring Integration 5.1 - 使用 @IntegrationConverter 的集成流转换不起作用
- go - 当我运行程序时,我只得到默认结果。即使输入数字不在该范围内
- java - java流中的atomicLong
- python - 如何从文档中删除所有肖像图片
- javascript - 异步函数返回一个承诺数组而不是实际的值数组