如何按DataFrame最后一行price_change值对DataFrame字典进行排序
实现方法
Python 3.7及以上版本的原生字典默认保留插入顺序,你可以直接通过sorted()函数对字典的键值对排序,核心逻辑是取出每个DataFrame最后一行的price_change值作为排序依据。
完整代码示例
第一步:构造测试数据(你有真实数据可跳过这一步)
import pandas as pd # 构造测试用的DataFrame btc_df = pd.DataFrame({ "price": [10, 15, 30, 10], "price_change": [0, 50, 100, -50] }) eth_df = pd.DataFrame({ "price": [20, 25, 40, 60], "price_change": [0, 25, 60, 50] }) doge_df = pd.DataFrame({ "price": [0.1, 0.2, 0.5, 0.3], "price_change": [0, 100, 150, -40] }) symbols = {"BTC": btc_df, "ETH": eth_df, "DOGE": doge_df}
第二步:按要求排序
# 按最后一行price_change升序排序 sorted_symbols = dict(sorted( symbols.items(), key=lambda item: item[1]["price_change"].iloc[-1] )) # 如果需要降序排序,加上reverse=True参数即可 # sorted_symbols = dict(sorted( # symbols.items(), # key=lambda item: item[1]["price_change"].iloc[-1], # reverse=True # ))
第三步:验证排序结果
for k, df in sorted_symbols.items(): print(f"{k}: 最后一行price_change = {df['price_change'].iloc[-1]}")
输出结果:
BTC: 最后一行price_change = -50 DOGE: 最后一行price_change = -40 ETH: 最后一行price_change = 50
注意事项
- 如果你使用的Python版本低于3.7,原生字典不保留插入顺序,建议用
collections.OrderedDict存储排序结果:
from collections import OrderedDict sorted_symbols = OrderedDict(sorted( symbols.items(), key=lambda item: item[1]["price_change"].iloc[-1] ))
- 运行前请确认每个DataFrame都存在
price_change字段,且不是空表,避免取最后一行时报索引错误。
内容的提问来源于stack exchange,提问作者fagner nunes
相关产品推荐
相关产品推荐

