同比增速和环比增速,同比增长率和环比增长率

首页 > 经验 > 作者:YD1662024-03-27 20:45:26

DataFrame 是 Pandas 的核心数据结构,由数据、列索引与行索引三部分构成。修改行索引名或列索引名,要使用 DataFrame 的 rename() 方法,通用格式如下:

df.rename( # 修改列索引名的参数 columns={"旧列名1":"新列名1", "旧列名2":"新列名2", ...}, # 修改行索引名的参数 index={"旧行名1":"新行名1", "旧行名2":"新行名2", ...} )

Pandas 里,绝大多数方法都不改变原始的输入数据,而是生成新的对象。修改前的 DataFrame 我们已经不需要了,直接用修改后的新 DataFrame 代替原有数据,传给变量 df 就可以。

df = df.rename(columns={'Unnamed: 0':'月份'}) print(df) ''' 输出: 月份 2020 2021 2022 0 1 1057066 1315871 1600889.0 1 2 1557372 1236012 1715643.0 2 3 1585905 1807039 1884091.0 ... 10 11 1562527 1876472 NaN 11 12 1381485 1703075 NaN '''

将月份作为行索引,更易于理解。将某一列提取出来作为行索引也有专门的方法:set_index(),括号中填入列名就可以。

df = df.set_index('月份') print(df) ''' 输出: 2020 2021 2022 月份 1 1057066 1315871 1600889.0 2 1557372 1236012 1715643.0 3 1585905 1807039 1884091.0 ... 11 1562527 1876472 NaN 12 1381485 1703075 NaN '''

Step 2 数据的选取

查看其中的特定数据:列的选取,使用 df['列名'] 的格式,多个列则df[['列名1', '列名2', ...]]

print(df['2021']) ''' 输出: 月份 1 1315871 2 1236012 3 1807039 ... 11 1876472 12 1703075 Name: 2021, dtype: int64 '''

选取特定行:用到 DataFrame 的 loc 方法,格式为 df.loc['行名']。选择多行df[['行名1', '行名2', ...]]

# 单行选取,查看二月的数据 print(df.loc[2]) ''' 输出: 2020 1557372.0 2021 1236012.0 2022 1715643.0 Name: 2, dtype: float64 '''

行列同时选取:

# 选取 2021 和 2022 年的第二季度数据(多行多列选取) print(df.loc[[4, 5, 6], ['2021', '2022']]) ''' 输出: 2021 2022 月份 4 1686054 2072804.0 5 1576076 1628067.0 6 1571498 1544610.0 ''' # 选取 2021 年 3 月与 7 月的数据(多行单列) print(df.loc[[3, 7], '2021']) ''' 输出: 月份 3 1807039 7 1690782 Name: 2021, dtype: int64 ''' # 选取 2021 年 10 月数据(单行单列) print(df.loc[10, '2021']) # 输出:1893907

Step 3 列的计算

同比分析

year_on_year = df['2021']/df['2020'] - 1 print(year_on_year) ''' 输出: 月份 1 0.244833 2 -0.206348 3 0.139437 ... 11 0.200921 12 0.232786 dtype: float64 '''

同比增速和环比增速,同比增长率和环比增长率(5)

将其添加到 df ,作为新增列显示,格式是这样的:df['新列名'] = ...

# 方法一:使用 year_on_year 变量传递值 year_on_year = df['2021']/df['2020'] - 1 df['同比增长'] = year_on_year # 方法二:直接写进一行 df['同比增长'] = df['2021']/df['2020'] - 1 print(df) ''' 输出: 2020 2021 同比增长 月份 1 1057066 1315871 0.244833 2 1557372 1236012 -0.206348 3 1585905 1807039 0.139437 ... 11 1562527 1876472 0.200921 12 1381485 1703075 0.232786 '''

环比分析

对 2021 年每个月份进行环比分析,其实就是求 df['2021'] 这个 Series 中,一个数值与上个数值的相对百分比变化。这个功能,Series 提供了专门的方法:pct_change() ,也就是 percent change 的缩写。我们直接调用,就能得出结果:

df['环比增长'] = df['2021'].pct_change() print(df) ''' 输出: 2020 2021 同比增长 环比增长 月份 1 1057066 1315871 0.244833 NaN 2 1557372 1236012 -0.206348 -0.060689 3 1585905 1807039 0.139437 0.461991 ... 11 1562527 1876472 0.200921 -0.009206 12 1381485 1703075 0.232786 -0.092406 '''

Step 4 完整代码

import pandas as pd # 设置展示样式的代码,可以忽略 pd.set_option('display.unicode.ambiguous_as_wide', True) pd.set_option('display.unicode.east_asian_width', True) path = "/Users/wenwen/Desktop/data-analysis/月活数据.csv" # 读取 csv 文件并转换成 DataFrame df = pd.read_csv(path) # 将第一列名 'Unnamed: 0' 改成 '月份' df = df.rename(columns={'Unnamed: 0':'月份'}) # 将月份列作为行索引 df = df.set_index('月份') # 只保留 2020 年和 2021 年的数据 df = df[['2020', '2021']] # 计算同比增长 df['同比增长'] = df['2021']/df['2020'] - 1 # 计算环比增长 df['环比增长'] = df['2021'].pct_change() df.loc[1, '环比增长'] = df.loc[1, '2021']/df.loc[12, '2020'] - 1 print(df) ''' 输出: 2020 2021 同比增长 环比增长 月份 1 1057066 1315871 0.244833 -0.047495 2 1557372 1236012 -0.206348 -0.060689 3 1585905 1807039 0.139437 0.461991 ... 11 1562527 1876472 0.200921 -0.009206 12 1381485 1703075 0.232786 -0.092406

Step 5 数据筛选

找出同比负增长与环比负增长的月份

year_on_year_down = df.loc[df['同比增长'] < 0, ['2021', '同比增长']] print(year_on_year_down) ''' 输出: 2021 同比增长 月份 2 1236012 -0.206348 ''' # 选择同比增长数字不小于 0 的行,展示同比增长列 df.loc[df['同比增长']>=0, '同比增长'] # 选择同比增长与环比增长都不小于 0 的行,展示同比增长与环比增长列 df.loc[(df['同比增长']>=0) & (df['环比增长']>=0), ['同比增长', '环比增长']] # 选择同比增长不小于 0 或环比增长不小于 0 的行,展示同比增长与环比增长列 df.loc[(df['同比增长']>=0) | (df['环比增长']>=0), ['同比增长', '环比增长']]

批量套用函数

def float_to_pct(num): pct = round(num * 100, 2) pct_string = '{}%'.format(pct) return pct_string print(month_on_month_down['环比增长'].apply(float_to_pct)) ''' 输出: 月份 1 -4.75% 2 -6.07% ... 11 -0.92% 12 -9.24% Name: 环比增长, dtype: object '''

同比增速和环比增速,同比增长率和环比增长率(6)

# 筛选同比负增长的月份 year_on_year_down = df.loc[df['同比增长'] < 0, ['2021', '同比增长']] # 筛选环比负增长的月份 month_on_month_down = df.loc[df['环比增长'] < 0, ['2021', '环比增长']] # 定义浮点数转百分数的函数 def float_to_pct(num, n): pct = round(num * 100, n) pct_string = '{}%'.format(pct) return pct_string # 批量将数字转为百分数 year_on_year_down['同比增长'] = year_on_year_down['同比增长'].apply(float_to_pct, n=2) month_on_month_down['环比增长'] = month_on_month_down['环比增长'].apply(float_to_pct, n=2) # 打印结果 print('-----------------------') print(year_on_year_down) print('-----------------------') print(month_on_month_down) print('-----------------------')

使用专业绘图库 Plotly

from plotly import express fig = express.line(df[['同比增长', '环比增长']] * 100, x =df.index, y=['同比增长', '环比增长']) fig.update_traces(mode='lines markers', line_dash='dot',hovertemplate='%{y:.2f}') fig.update_traces(line_color='#fda161', selector={'name':'同比增长'}) fig.update_traces(line_color='#3cd3ef',selector={'name':'环比增长'}) fig.update_layout( legend_title='', xaxis=dict(tickvals=list(range(1, 13)),showgrid=False), yaxis=dict(title='增长(%)', showgrid=False, zeroline=True, zerolinecolor='grey', zerolinewidth=0.2), ) fig.show()

同比增速和环比增速,同比增长率和环比增长率(7)

上一页12末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.