我有一个非常大的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)
答案 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。
如果对您有帮助,请尝试。