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

如何计算Pandas DataFrame中两行数据的增长率(百分比)

计算不同时期用户增长率的Pandas解决方案

处理步骤

核心思路是先把数据转换为宽格式,让每个来源的当前值和历史值在同一行,再计算增长率,最后整理成目标格式。

  1. 构造示例数据(已有DataFrame可跳过)
import pandas as pd
import numpy as np

data = {
    'sessionSource': ['instagram.com', 'instagram.com', 'l.instagram.com', 'l.instagram.com', 'snapchat.com', 'snapchat.com'],
    'dateRange': ['current', 'previous', 'current', 'previous', 'current', 'previous'],
    'activeUsers': [5, 0, 83, 11, 2, 1]
}
df = pd.DataFrame(data)
  1. 转换为宽格式
    将每个sessionSource的current和previous值放在同一行,便于计算:
wide_df = df.pivot(index='sessionSource', columns='dateRange', values='activeUsers').reset_index()
  1. 计算增长率
    使用公式(当前值-历史值)/历史值 * 100,同时处理历史值为0的情况(避免除以0错误):
# 历史值为0时返回'N/A',可根据需求自定义内容
wide_df['Growth'] = np.where(
    wide_df['previous'] == 0,
    'N/A',
    round((wide_df['current'] - wide_df['previous']) / wide_df['previous'] * 100, 2).astype(str) + '%'
)
  1. 整理成目标格式
    筛选当前时期的数据,调整列顺序和名称:
result_df = wide_df[['sessionSource', 'current']].rename(columns={'current': 'activeUsers'})
result_df['dateRange'] = 'current'
result_df['Growth'] = wide_df['Growth']
# 调整列顺序匹配需求
result_df = result_df[['sessionSource', 'dateRange', 'activeUsers', 'Growth']].reset_index(drop=True)

最终结果

运行后result_df的输出为:

sessionSource dateRange  activeUsers  Growth
0    instagram.com   current            5    N/A
1  l.instagram.com   current           83  654.55%
2     snapchat.com   current            2  100.00%

自定义调整

  • 若需修改增长率的小数位数,调整round函数的第二个参数即可
  • 若历史值为0时需要显示其他内容(比如'无历史数据'),替换np.where中的'N/A'即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:15:36