首页 > 解决方案 > 优化 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

标签: pythonpandas

解决方案


推荐阅读