如何计算不同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
相关产品推荐
相关产品推荐

