Pandas DataFrame:通过匹配键聚合多级组

数据挖掘 Python 熊猫 数据框 聚合
2022-02-13 14:06:17

我有一些看起来像这样的数据;

data.head()

    stock  date  binNum    volume
0  stock0  d120       2  249500.0
1  stock0  d120       3   81500.0
2  stock0  d120       4   79000.0
3  stock0  d120       5  244000.0
4  stock0  d120       6  175000.0

我可以使用以下代码获得特定股票在所有日子里每个箱子的平均交易量;

stock0 = data[(data['stock'] == 'stock0')]
binGroups = stock0[['binNum', 'volume']].groupby('binNum', sort=False)
stock0vol = binGroups.aggregate({'volume': np.mean}).reset_index()
stock0vol.head()

   binNum         volume
0       2  174095.238095
1       3  100428.571429
2       4   79880.952381
3       5   73642.857143
4       6   69761.904762

我想将此应用于所有股票。结果将是一个包含股票列但没有日期列的表(因为它是所有日期的聚合)。像这样的东西;

    stock  binNum         volume
0  stock0       2  174095.238095
1  stock0       3  100428.571429
2  stock0       4   79880.952381
3  stock0       5   73642.857143
4  stock0       6   69761.904762

我可以通过将上面的代码放在一个循环中并逐个连接行来做到这一点,但我相信有一种更优雅的方法可以通过分组和聚合来做到这一点。任何人都可以阐明一下吗?

1个回答

抱歉,我意识到我需要做的只是添加另一个级别的分组,但聚合是一样的;

stockBinGroups = data.groupby(['stock', 'binNum'], sort=False)
binAveVol = stockBinGroups.aggregate({'volume': np.mean}).reset_index()
binAveVol.head()

    stock  binNum         volume
0  stock0       2  174095.238095
1  stock0       3  100428.571429
2  stock0       4   79880.952381
3  stock0       5   73642.857143
4  stock0       6   69761.904762