pandas groupby中的np.size变换很慢(需要优化)

时间:2017-01-23 08:56:28

标签: python pandas numpy

我有一个非常大的DataFrame,根据下面的 df 。我根据示例代码应用布尔过滤,然后计算groupby-variable在过滤的DataFrame中具有元素的次数。鉴于我的DataFrame(几百万行)的大小,这个计数操作需要一些时间。有人可以给我一个关于如何优化此操作以获得更快的专业提示吗?

提前致谢!

/ swepab

df = pd.DataFrame({'agg_var1' : [i for i in ['a'] * 3] + [i for i in ['b'] * 7] + [i for i in ['c'] * 5] + [i for i in ['d'] * 5] + [i for i in ['e'] * 2]
               ,'num_var1' : [i for i in range(1,23)]
               ,'num_var2' : [np.nan,1,1,2,2,3,3,3,4,4,5,5,6,6,6,7,8,9,9,9,9,10]
               ,'num_var3' : np.random.random_sample(22)
               ,'d_var1' : pd.date_range('20140101', freq = '1m', periods = 22).strftime("%Y%m")
              })


df['count_var1'] = df[df.num_var1 > 10][['agg_var1', 'd_var1']].groupby('agg_var1').transform(np.size)

1 个答案:

答案 0 :(得分:0)

我创建了一个函数,它执行groupby并转换传递给它的数据帧的部分并返回一个系列。

def my_fun(my_df):
    return my_df.groupby('agg_var1').transform(np.size)
df['new_col']=my_fun(df[df.num_var1 > 10][['agg_var1', 'd_var1']])

时间性能表明长度为29的数据集改善了0.03 ms。

如果对您有帮助,请尝试。