熊猫groupby,执行操作,将结果添加到所述groupby数据框内的列

时间:2019-03-22 14:20:35

标签: python-3.x pandas dataframe pandas-groupby

假设以下数据框foo(此处出于展示目的由子数据框构成):

foo1 = pd.DataFrame({"TIME":(np.arange(1,10,1))})
foo1['Letter'] = 'A'
foo1['Number'] = 50
foo1['Variable1'] = np.random.uniform(10,100, size=len(foo1))
foo1['Variable2'] = np.random.uniform(10,100, size=len(foo1))
foo1['Variable3'] = np.random.uniform(10,100, size=len(foo1))

foo2 = pd.DataFrame({"TIME":(np.arange(1,20,0.5))})
foo2['Letter'] = 'A'
foo2['Number'] = 100
foo2['Variable1'] = np.random.uniform(10,100, size=len(foo2))
foo2['Variable2'] = np.random.uniform(10,100, size=len(foo2))
foo2['Variable3'] = np.random.uniform(10,100, size=len(foo2))

foo3 = pd.DataFrame({"TIME":(np.arange(1,40,2.5))})
foo3['Letter'] = 'B'
foo3['Number'] = 40
foo3['Variable1'] = np.random.uniform(10,100, size=len(foo3))
foo3['Variable2'] = np.random.uniform(10,100, size=len(foo3))
foo3['Variable3'] = np.random.uniform(10,100, size=len(foo3))

foo = pd.concat([foo1,foo2,foo3])

数据框实际上要大得多(几百万行)。我想对基础子数据帧执行一些计算,并将结果分配给新列。我使用groupby拆分它们。然后,例如,我想找到相对于变量1的第一个值以及所有三个变量的均值的累积百分比变化,并将其分配给新列。

当前,我正在使用groupby创建一个数据帧列表,然后像这样遍历这些数据帧:

df_split = [g for _, g in foo.groupby(['Letter','Number'])]

for i,df in enumerate(df_split):
    df['Perc1'] = df['Variable1'].pct_change().cumsum()*100
    df['MeanPerc'] = df[['Variable1','Variable2','Variable3']].mean(axis=1).pct_change().cumsum()*100
    df['Var1Ratio'] = df['TIME'].iloc[0]/df['Variable1']

foo_end = pd.concat(df_split)

我很确定有一种更有效的方法来执行此操作,从而避免了数据框列表的一部分; df尺寸增加时,它变得太慢。但是我真的无法弄清楚如何对groupby对象执行这些计算并将它们分配回groupby对象。由于第一个条目很重要,因此需要针对每个子数据帧进行计算。

如果不能直接通过groupby进行操作,是否有更快/更好的方法?

如果有任何建议,我将不胜感激:-)

0 个答案:

没有答案