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

如何用Pandas从两个反转转置的DataFrame计算价格百分比差异

计算两个转置反转DataFrame中Price的百分比差异(Pandas实现)

我来帮你梳理下用Pandas处理这个需求的具体方法,核心是先让两个DataFrame的结构对齐,再计算百分比差异。先明确下你的两个表:第一个是常规的长格式表,第二个是第一个表转置后又反转了列顺序的宽格式表,我们需要把它们的Price值对应起来计算差值。

方法一:按Exchange匹配计算(推荐,更鲁棒)

这种方法不依赖索引顺序,而是通过Exchange字段精准匹配,适合实际场景中可能出现的结构变动。

1. 整理第二个DataFrame的结构

首先把宽格式的第二个表转置回长格式,并重命名列名来对齐第一个表:

import pandas as pd

# 假设你的第一个表是df1,第二个表是df2
# 转置df2,重置索引并设置列名
df2_transposed = df2.T.reset_index()
df2_transposed.columns = ['Original_Index', 'Exchange', 'Ticker', 'Price']

2. 合并两个表,匹配对应数据

利用Exchange和Ticker作为连接键,把两个表的对应数据合并到一起:

merged_df = pd.merge(df1, df2_transposed, on=['Exchange', 'Ticker'], suffixes=('_df1', '_df2'))

3. 计算百分比差异

添加新列来存储百分比差异,公式采用(df2价格 - df1价格)/df1价格 * 100(你可以根据需求调整分子顺序):

merged_df['Price_Pct_Diff'] = (merged_df['Price_df2'] - merged_df['Price_df1']) / merged_df['Price_df1'] * 100

最终的merged_df会包含所有匹配后的字段,以及计算好的百分比差异列。

方法二:按索引顺序匹配(仅当列顺序严格对应时使用)

如果你能确定第二个表的列顺序正好是第一个表的索引[3,1,2,0],可以直接按顺序提取数据计算:

# 提取df2的Price行并转为数值类型
df2_prices = df2.loc['Price'].astype(float)

# 按df2的列顺序提取df1的Price数据
df1_prices = df1.loc[df2.columns]['Price'].reset_index(drop=True)

# 计算百分比差异
pct_diff = (df2_prices.values - df1_prices.values) / df1_prices.values * 100

# 整理成结果DataFrame
result_df = pd.DataFrame({
    'Exchange': df1.loc[df2.columns]['Exchange'].values,
    'Ticker': df1.loc[df2.columns]['Ticker'].values,
    'Price_df1': df1_prices.values,
    'Price_df2': df2_prices.values,
    'Price_Pct_Diff': pct_diff
})

结果说明

从你的示例数据来看,两个表的Price值只是精度略有差异(比如df1的binance Price是0.159110,df2是0.15911),所以计算出的百分比差异会非常接近0,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:31:21