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=…