如何按Date和Exchange分组对price列求和?Pandas问题求助
问题:按Date和Exchange分组对price求和的实现方法
原始数据表格
| Date | Exchange | price | x |
|---|---|---|---|
| 02/12 | LSE | 1 | s |
| 03/12 | LSE | 2 | d |
| 03/12 | LSE | 2 | f |
| 03/12 | CBOE | 3 | q |
| 04/12 | CBOE | 4 | w |
| 04/12 | CBOE | 5 | t |
目标结果表格
| Date | Exchange | price |
|---|---|---|
| 02/12 | LSE | 1 |
| 03/12 | LSE | 4 |
| 03/12 | CBOE | 3 |
| 04/12 | CBOE | 9 |
我尝试执行代码spread_per_isin_size_2500.groupby(['exchange', 'date']).size().groupby(level=1).max(),但无法实现需求,请问该如何达成目标?
解决方案
你现在用的代码是在统计分组的数量然后取最大值,这和你要的按Date+Exchange分组对price求和的需求完全不匹配哦,咱们换个思路一步就能搞定:
直接通过groupby指定分组列,然后对price列调用求和方法即可,具体代码如下:
# 注意列名要和你的DataFrame实际列名一致,这里用原始表格的大写列名示例 result = spread_per_isin_size_2500.groupby(['Date', 'Exchange'])['price'].sum().reset_index()
代码说明:
groupby(['Date', 'Exchange']):把Date和Exchange完全相同的行归为一组['price'].sum():仅对分组后的price列执行求和操作,忽略其他无关列reset_index():将分组时作为索引的Date和Exchange重新转为普通列,让结果结构和你要的目标表格完全一致
如果你的DataFrame里列名是小写的date和exchange(和你之前代码里的写法一致),那调整列名即可:
result = spread_per_isin_size_2500.groupby(['date', 'exchange'])['price'].sum().reset_index()
运行这段代码后,就能得到你想要的分组求和结果啦。
内容的提问来源于stack exchange,提问作者Johny
相关产品推荐
相关产品推荐

