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

如何在Pandas中按币种分别计算BTC和ETH的价格涨跌幅?

解决BTC和ETH涨跌幅计算的分离问题及赋值警告

你遇到的警告源于拆分出的DataFrame是原数据的切片副本,pandas无法确认你是否要修改原数据,因此抛出提示。以下是几种实用的解决办法:

方法1:显式创建副本消除警告

拆分数据时用.copy()生成独立副本,后续修改就不会触发警告:

# 拆分BTC和ETH数据,生成独立副本
btc_df = df[df['Symbol'] == 'BTC'].copy()
eth_df = df[df['Symbol'] == 'ETH'].copy()

# 计算BTC涨跌幅
btc_initial = btc_df['Close'].iloc[0]
btc_df['Performance'] = 100 * (btc_df['Close'] - btc_initial) / btc_initial

# 计算ETH涨跌幅
eth_initial = eth_df['Close'].iloc[0]
eth_df['Performance'] = 100 * (eth_df['Close'] - eth_initial) / eth_initial

方法2:不拆分,用groupby批量计算(更高效)

直接在原DataFrame上按币种分组,一次性完成所有币种的涨跌幅计算:

# 定义涨跌幅计算函数
def calculate_performance(group):
    initial = group['Close'].iloc[0]
    group['Performance'] = 100 * (group['Close'] - initial) / initial
    return group

# 按币种分组计算并合并结果
df = df.groupby('Symbol').apply(calculate_performance)

处理后原DataFrame会新增Performance列,分别对应BTC和ETH的涨跌幅,每个币种的计算都基于自身初始价格。

方法3:用.loc直接修改原数据(保留在原表)

如果想在原DataFrame中直接添加涨跌幅列,可通过.loc定位指定币种的行赋值:

# 计算BTC涨跌幅并写入原表
btc_initial = df[df['Symbol'] == 'BTC']['Close'].iloc[0]
df.loc[df['Symbol'] == 'BTC', 'Performance'] = 100 * (df['Close'] - btc_initial) / btc_initial

# 同理处理ETH
eth_initial = df[df['Symbol'] == 'ETH']['Close'].iloc[0]
df.loc[df['Symbol'] == 'ETH', 'Performance'] = 100 * (df['Close'] - eth_initial) / eth_initial

这种方式直接操作原DataFrame,不会产生副本警告,同时保留所有数据在一张表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:50:28