0

尝试使用 .resample() 方法和 .apply() 计算交易量加权平均价格时遇到问题。这是设置。我有一个名为 All 的数据框,其中包含以下信息:

All.head()

                               price     volume buy_sell market_limit misc
dtime                                                                      
2020-08-06 11:26:45.705199957  395.23   0.064363      buy        limit     
2020-08-06 11:26:45.702500105  395.23   0.114847      buy        limit     
2020-08-06 11:26:45.700900078  395.23  30.000000      buy        limit     
2020-08-06 11:26:45.698899984  395.23  11.175000      buy        limit     
2020-08-06 11:26:45.696000099  395.23   2.415115      buy        limit   

All.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 38471 entries, 2020-08-06 11:26:45.705199957 to 2020-08-09 04:20:45.227400064
Data columns (total 5 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   price         38471 non-null  float64
 1   volume        38471 non-null  float64
 2   buy_sell      38471 non-null  object 
 3   market_limit  38471 non-null  object 
 4   misc          38471 non-null  object 
dtypes: float64(2), object(3)
memory usage: 1.8+ MB

数据框有一个日期时间索引,因此我可以使用 ^resample 方法对每日频率的数据进行重新采样。现在,我想使用 apply() 和 np.average() 计算成交量加权平均价格

All.resample('1D').apply(lambda x: np.average(x.price, weights = x.volume))

但是,这会导致以下错误:

AttributeError: 'Series' object has no attribute 'price'

当绕过 .resample() 并使用 .groupby() 作为替代方案时,它确实有效。但是,我需要执行其他步骤来处理日期,我真的不想这样做。

All_alt = All.reset_index()
All_alt['dtime'] = All_alt['dtime'].apply(lambda x: x.date())
All_alt.head()

dtime   price     volume buy_sell market_limit misc
0  2020-08-06  395.23   0.064363      buy        limit     
1  2020-08-06  395.23   0.114847      buy        limit     
2  2020-08-06  395.23  30.000000      buy        limit     
3  2020-08-06  395.23  11.175000      buy        limit     
4  2020-08-06  395.23   2.415115      buy        limit    


All_alt.groupby(['dtime']).apply(lambda x: np.average(x.price, weights = x.volume))

dtime
2020-08-06    396.889472
2020-08-07    381.178095
2020-08-08    387.182528
2020-08-09    397.162415
dtype: float64

任何人都可以使用 resample() 帮助我使用正确的语法。我不明白为什么 resample() 在使用 apply() 时会创建一个 Series 对象

提前谢谢了。

4

0 回答 0