Python 熊猫:通过重复使用计算出的指数进行分组

Python 熊猫:通过重复使用计算出的指数进行分组,python,pandas,Python,Pandas,理想情况下,我希望重用GroupBy对象以提高密集型操作的性能 我有一个包含多个分类列和一个值列的数据文件,我希望能够对各种列组合进行GROUBBY操作,考虑以下内容: import numpy as np import pandas as pd # Build some data to work with: sim_elements = 1e6 sims = 1e5 class_dict = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'} d = {'Year':

理想情况下,我希望重用GroupBy对象以提高密集型操作的性能

我有一个包含多个分类列和一个值列的数据文件,我希望能够对各种列组合进行GROUBBY操作,考虑以下内容:

import numpy as np
import pandas as pd

# Build some data to work with:
sim_elements = 1e6
sims = 1e5
class_dict = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}

d = {'Year': np.random.randint(1, sims+1, size=sim_elements),
     'Month': np.random.randint(1, 12+1, size=sim_elements),
     'Day': np.random.randint(1, 29, size=sim_elements),
     'Sid': np.random.randint(1e6, size=sim_elements),
     'Class': [class_dict[i] for i in 
               np.random.randint(len(class_dict.keys()), size=sim_elements)],
     'Value': np.random.uniform(size=sim_elements) * 1e6}
df = pd.DataFrame(d)

# Execute a groupby operation across all columns and sum over the Value column.
gb = df.groupby(('Year', 'Month', 'Day', 'Class', 'Sid')).agg({'Value': np.sum})
gb
如果我对Value列应用一个操作,那么我想重新计算groupby操作:

df.Value *= np.random.uniform(0,2, size=sim_elements)
gbn = df.groupby(('Year', 'Month', 'Day', 'Region', 'Sid')).agg({'Value': np.sum})
当在sim_元素的大值上执行此操作时,速度会很慢,每次运行我都会执行数百次此操作。1e6大约需要4秒,1e7大约需要50秒,我需要有效地支持至少2e7元素


我认为计算出的groupby MultiIndex应该可以重复使用,以重新计算新的agg函数(例如np.sum),但我不知道如何应用它。如何在相同形状和列结构的数据帧上多次高效地重用groupby方法?

为什么要使用groupby链接的
agg
?您可以将gb设置为实际的groupby对象,然后使用它执行多个聚合函数以获得不同的结果。True和我经常这样做,但在本例中,我希望能够使用groupby数据/构造在新数据帧上应用该操作。实际上,我想将groupby保存到hdf并在单独的线程中重新加载,但似乎不可能将groupby对象保存到文件中。啊,我明白了。。。。不幸的是,我不知道这是否可能,或者如果是,如何做到这一点。。。