如何用Pandas DataFrame出售最低排名资产以凑足目标金额
解决方案
实现思路
要完成“出售最低价值资产直至凑够目标金额”的需求,核心逻辑是从价值最低的资产开始(对应Rank数值最大的条目),优先全额出售价值低于剩余目标的资产,最后出售部分价值高于剩余目标的资产,具体步骤如下:
- 将原DataFrame按
Rank降序排列,确保先处理价值最低的资产; - 遍历排序后的资产,根据剩余目标金额计算每个资产的出售金额和剩余可用金额;
- 收集结果并转换为新的DataFrame。
完整代码
import pandas as pd # 原数据初始化 df = pd.DataFrame({'Tickers': ['AAPL', 'TSLA', 'SGOL', 'BA', 'V'], 'Value': [400, 1300, 200, 600, 400], 'Rank': [1, 4, 3, 5, 2]}) df = df.sort_values(by=["Rank"]) assets_value = df['Value'].sum() sell_amount = 1000 # 核心处理逻辑 remaining = sell_amount result_list = [] # 按Rank降序排列,优先处理最低价值资产 df_sorted = df.sort_values(by="Rank", ascending=False) for _, row in df_sorted.iterrows(): if remaining <= 0: break ticker = row['Tickers'] asset_value = row['Value'] if asset_value <= remaining: # 全额出售该资产 sold = asset_value available = 0 remaining -= asset_value else: # 出售部分资产,凑够剩余目标 sold = remaining available = asset_value - remaining remaining = 0 result_list.append({ 'Tickers': ticker, 'Sold': sold, 'Available': available }) # 转换为结果DataFrame result_df = pd.DataFrame(result_list) print(result_df)
输出结果
Tickers Sold Available 0 BA 600 0 1 TSLA 400 900
内容的提问来源于stack exchange,提问作者C_Turbo
相关产品推荐
相关产品推荐

