从 groupby 对象将函数应用于组中的一列的有效方法是什么?

what is an efficient way of applying a function to one column in a group from groupby object?

我有一个包含 50 万行的数据框。

我有以下列:

               Symbol      Open      High       Low    Close    Volume

Date                                                                    
01-Aug-2017    AADR   49.8800    49.8800    49.8800    49.8800     790
02-Aug-2017    AADR   49.8432    49.8432    49.8432    49.8432     684

我在数据框中有 2071 个符号:

>>> grouped = df.groupby('Symbol')

>>> len(grouped)

 2071

我只想在一列上应用滚动平均函数(即关闭) 每组的平均值并将平均值添加为现有数据框中的额外列。

我相信我可以做到以下几点:

results = {}
for name, group in grouped:
    ma_col = group[1].Close.ewm(span=10, min_periods=10).mean()
    results[name] = ma_col    

这给了我结果字典,然后我可以把它变成 DataFrame 来使用。

是否有更有效(性能更好)的方法来做同样的事情?

您可以使用 groupby + transform -

df.groupby('Symbol').Close.transform(lambda x: x.ewm(span=10, min_periods=10).mean())