You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算不同DataFrame两列间的价格百分比差值?

需求:生成加密货币交易对价格百分比差值DataFrame

我有两个包含加密货币交易对及浮点型价格的DataFrame,需要生成一个包含交易对和价格百分比差值的新DataFrame。

我尝试了以下函数,但未能成功运行:

def get_diff():
    for i in df2['askPrice']:
        for x in df3['Low price']:
            i = float(i)
            x = float(x)
            try:
                if i > x:
                    res = (round(i) - round(x)) / round(x) * 100
                    print(round(res))
                else:
                    print('lower')
            except ZeroDivisionError:
                print(float('inf'))
get_diff()

问题分析

你的代码存在两个核心问题:

  • 双重循环会把df2的每个价格和df3的每个价格逐一配对,完全不符合按交易对匹配计算差值的逻辑
  • 仅打印结果,没有生成关联交易对的新DataFrame,也未保留计算数据

正确实现方案

假设两个DataFrame都包含相同的交易对标识列(比如列名为symbol),按以下步骤实现:

1. 预处理价格列(确保为数值型)

先统一转换价格列的类型,避免后续计算报错:

df2['askPrice'] = df2['askPrice'].astype(float)
df3['Low price'] = df3['Low price'].astype(float)

2. 按交易对合并数据集

用merge方法关联两个DataFrame,只保留有对应交易对的数据:

merged_df = pd.merge(df2[['symbol', 'askPrice']], df3[['symbol', 'Low price']], on='symbol', how='inner')
  • 若要保留所有交易对(包括仅在单个DataFrame中存在的),可将how='inner'改为how='outer'

3. 计算价格百分比差值

新增列计算百分比差值,公式为(askPrice - Low price)/Low price * 100,建议最后再做四舍五入避免精度损失:

merged_df['price_diff_pct'] = ((merged_df['askPrice'] - merged_df['Low price']) / merged_df['Low price']) * 100
# 可选:将结果保留两位小数
merged_df['price_diff_pct'] = merged_df['price_diff_pct'].round(2)

4. 生成最终结果DataFrame

提取需要的交易对和差值列即可:

final_df = merged_df[['symbol', 'price_diff_pct']]
print(final_df)

除零异常处理

如果存在Low price为0的情况,用numpy处理避免报错:

import numpy as np

merged_df['price_diff_pct'] = np.where(merged_df['Low price'] == 0, 
                                       np.inf, 
                                       ((merged_df['askPrice'] - merged_df['Low price']) / merged_df['Low price']) * 100)

内容的提问来源于stack exchange,提问作者Xena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:31:04