Python 熊猫:计算每天每只股票的平均值和总值
我正在计算每天每只股票的平均交易量和总交易量 我的数据就像Python 熊猫:计算每天每只股票的平均值和总值,python,pandas,sum,average,Python,Pandas,Sum,Average,我正在计算每天每只股票的平均交易量和总交易量 我的数据就像 ric date volume vod 7-17 43 vod 7-17 4444 vod 7-17 53 vod 7-18 66 vod 7-19 77 vod 7-19 29 ... ... ... bat 7-17 87 bat 7-18 99 ... ...
ric date volume
vod 7-17 43
vod 7-17 4444
vod 7-17 53
vod 7-18 66
vod 7-19 77
vod 7-19 29
... ... ...
bat 7-17 87
bat 7-18 99
... ... ...
我想把它转换成
ric date volume day_v_vol day_sum_vol
vod 7-17 43 1513 4541
vod 7-17 4444 1513 4541
vod 7-17 53 1513 4541
vod 7-18 66 66 66
vod 7-19 77 53 106
vod 7-19 29 53 106
... ... ... ... ...
bat 7-17 87 87 87
bat 7-18 99 99 99
... ... ... ... ...
我用了“分组”的方法
grouped=data.groupby(['ric','date'])
data['sumbas']=grouped.sum()
data['avbas']=grouped.mean()
但它不是很方便。在“groupby”之后,我需要将新数据集与旧数据集合并
任何人都可以给我一些快速的方法,可以直接生成一个我想要的?提前谢谢 您可以使用
agg
传递要在groupby
对象上执行的函数列表
import numpy as np
grouped = df.groupby(['date', 'ric']).volume.agg([sum, np.mean])
grouped.columns = ['sumbas', 'avbas']
>>> grouped
sumbas avbas
date ric
7-17 bat 87 87
vod 4530 1510
7-18 bat 99 99
vod 66 66
7-19 vod 106 53
您仍然需要将其连接回原始数据帧:
>>>df.set_index(['date', 'ric']).join(grouped)
volume sumbas avbas
date ric
7-17 bat 87 87 87
vod 43 4530 1510
vod 4444 4530 1510
vod 43 4530 1510
7-18 bat 99 99 99
vod 66 66 66
7-19 vod 77 106 53
vod 29 106 53
另一种方法是创建groupby
对象,然后迭代调用transform
:
gb_vol = df.groupby(['date', 'ric'])['volume']
for f_name, func in zip(['daily_vol', 'davg_vol'],
[np.sum, np.mean]):
df[f_name] = gb_vol.transform(func)
>>> df
ric date volume daily_vol davg_vol
6 bat 7-17 87 87 87
0 vod 7-17 43 4530 1510
1 vod 7-17 4444 4530 1510
2 vod 7-17 43 4530 1510
7 bat 7-18 99 99 99
3 vod 7-18 66 66 66
4 vod 7-19 77 106 53
5 vod 7-19 29 106 53
嗨,亚历克斯,谢谢你的代码。我导入了pandas和numpy并应用了您的代码。但是系统给了我:NameError:name'df'没有定义
df
只是您正在使用的任何数据帧的变量名。再次感谢。我更改了变量名。但这次它显示:ValueError:列重叠但未指定后缀:Index([u'avbas'],dtype='object'),这是因为avbas
必须已经在原始数据帧中。尝试在grouped.columns=…