尝试使用 .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 对象
提前谢谢了。