Pandas合并分组排序后DataFrame时exchange_name列丢失问题求助
Pandas合并DataFrame后exchange_name列消失的问题
问题背景
我有两个Pandas DataFrame,希望将它们合并为一个。原始数据如下:
卖单数据:
asks_price asks_qty exchange_name_ask 0 20156.51 0.000745 Coinbase 1 20156.52 0.050000 Coinbase
买单数据:
bids_price bids_qty exchange_name_bid 2 20153.28 0.000200 Coinbase 3 20153.27 0.051000 Coinbase
期望合并结果:
asks_price asks_qty exchange_name_ask bids_price bids_qty exchange_name_bid 0 20156.51 0.000745 Coinbase 20153.28 0.000200 Coinbase 1 20156.52 0.050000 Coinbase 20153.27 0.051000 Coinbase
编写的代码如下:
ask_snapshot = ask_snapshot.groupby('asks_price')['asks_qty'].sum().reset_index() bid_snapshot = bid_snapshot.groupby('bids_price')['bids_qty'].sum().reset_index() ask_snapshot = ask_snapshot.sort_values(by='asks_price').reset_index() bid_snapshot = bid_snapshot.sort_values(by='bids_price', ascending=False).reset_index() ask = ask_snapshot.head(20) bid = bid_snapshot.head(20) snapshot = pd.concat([ask, bid], axis=1, join='inner')
但合并后的snapshot中exchange_name相关列消失,不清楚原因。
原因分析
问题出在groupby操作的列选择上:
- 执行
ask_snapshot.groupby('asks_price')['asks_qty'].sum()时,仅指定按asks_price分组,且只对asks_qty做求和聚合,exchange_name_ask既不是分组键,也未被纳入聚合逻辑,因此会被直接丢弃。 - 买单数据的
exchange_name_bid列也在相同的groupby逻辑中被排除,导致后续合并后无法看到这两个列。
解决方案
修改groupby逻辑,将exchange_name相关列加入分组键,确保这些列被保留在结果中。如果同一价格对应的交易所名称唯一,此操作不会影响聚合结果;若同一价格下有多个交易所,会按「价格+交易所」的组合分组聚合数量:
# 处理卖单数据:保留exchange_name_ask列 ask_snapshot = ask_snapshot.groupby(['asks_price', 'exchange_name_ask']).agg({'asks_qty': 'sum'}).reset_index() # 处理买单数据:保留exchange_name_bid列 bid_snapshot = bid_snapshot.groupby(['bids_price', 'exchange_name_bid']).agg({'bids_qty': 'sum'}).reset_index() # 后续排序、取前20条、合并操作不变(添加drop=True避免生成多余索引列) ask_snapshot = ask_snapshot.sort_values(by='asks_price').reset_index(drop=True) bid_snapshot = bid_snapshot.sort_values(by='bids_price', ascending=False).reset_index(drop=True) ask = ask_snapshot.head(20) bid = bid_snapshot.head(20) snapshot = pd.concat([ask, bid], axis=1, join='inner')
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

