adventure第一部分函数知识点

计算环比

环比增长率=(本期数-上期数)/上期数×100%


方法一:利用diff

函数:DataFrame.diff(periods=1, axis=0)
periods:移动的幅度,int类型,默认值为1。
axis:移动的方向,{0 or ‘index’, 1 or ‘columns’},如果为0或者’index’,则上下移动,如果为1或者’columns’,则左右移动。

先利用sort_values(ascending = False)将顺序按照月份降序排序。
再通过如下方式计算环比,要注意除以-1。同时,用list将结果转换为列表,方便增加和删除元素。最后再用pd.DataFrame转回dataframe格式。

order_num_diff = list((overall_sales_performance.order_num.diff()/overall_sales_performance.order_num)/-1)
order_num_diff.pop(0) #删除列表中第一个元素
order_num_diff.append(0) #将0新增到列表末尾
order_num_diff
方法二:利用pct_change()

DataFrame.pct_change(periods=1, fill_method=‘pad’, limit=None, freq=None, **kwargs)
表示当前元素与先前元素的相差百分比,当然指定periods=n,表示当前元素与先前n 个元素的相差百分比。
默认情况下,计算与前一行的百分比变化。这在比较元素时间序列中的变化百分比时很有用。
参考文章

#pct_change()当前元素与先前元素的相差百分比,求不同区域10月11月环比
order_x = pd.Series([])
amount_x = pd.Series([])
for i in region_list:
    a=gather_customer_order_10_11_group.loc[gather_customer_order_10_11_group['chinese_territory']==i]['order_num'].pct_change().fillna(0)
    b=gather_customer_order_10_11_group.loc[gather_customer_order_10_11_group['chinese_territory']==i]['sum_amount'].pct_change().fillna(0)
    order_x=order_x.append(a)
    amount_x = amount_x.append(b)
gather_customer_order_10_11_group['order_diff']=order_x
gather_customer_order_10_11_group['amount_diff']=amount_x

需要注意的是series的append!不能形如order_x.append('3')的形式追加,需要追加一个序列,形如order_x=order_x.append(Series(['3'])),需要用原来的序列来接受。如果没有设置索引,那么就会默认从0开始自动设置索引。

~取对立面和str.contains

筛选出2019年的1-11月信息。
需要用两个条件共同判断。第一是用str.contains判断年份里带有2019的信息,选出2019年的条目。再加上~去除12月的信息。

gather_customer_order_month_1_11 = gather_customer_order_month[(gather_customer_order_month.create_year_month.str.contains('2019'))&(~gather_customer_order_month.create_year_month.str.contains('12'))]
gather_customer_order_month_1_11.head()

pd.cut()实现年龄分段(分箱)

pd.cut( x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', )
x : 一维数组
bins :整数,标量序列或者间隔索引,是进行分组的依据,
如果填入整数n,则表示将x中的数值分成等宽的n份(即每一组内的最大值与最小值之差约相等);
如果是标量序列,序列中的数值表示用来分档的分界值
如果是间隔索引,“ bins”的间隔索引必须不重叠
right :布尔值,默认为True表示包含最右侧的数值
当“ right = True”(默认值)时,则“ bins”=[1、2、3、4]表示(1,2],(2,3],(3,4]
当bins是一个间隔索引时,该参数被忽略。
labels : 数组或布尔值,可选.指定分箱的标签
如果是数组,长度要与分箱个数一致,比如“ bins”=[1、2、3、4]表示(1,2],(2,3],(3,4]一共3个区间,则labels的长度也就是标签的个数也要是3
如果为False,则仅返回分箱的整数指示符,即x中的数据在第几个箱子里
当bins是间隔索引时,将忽略此参数
retbins: 是否显示分箱的分界值。默认为False,当bins取整数时可以设置retbins=True以显示分界值,得到划分后的区间
precision:整数,默认3,存储和显示分箱标签的精度。
include_lowest:布尔值,表示区间的左边是开还是闭,默认为false,也就是不包含区间左边。
duplicates:如果分箱临界值不唯一,则引发ValueError或丢弃非唯一

sales_customer_order_11['age_level'] = pd.cut(sales_customer_order_11['customer_age'],bins=[i for i in range(30,66,5)],right=False,labels=['30-34','35-39','40-44','45-49','50-54','55-59','60-64'])
sales_customer_order_11.head()

通过loc新增一列,并且添加数值

如下,新增的列名为age_level2

df_customer_order_bycle.loc[(df_customer_order_bycle['customer_age'] <= 29),'age_level2'] = '<=29'
df_customer_order_bycle.loc[(df_customer_order_bycle['customer_age'] >= 30) & (df_customer_order_bycle['customer_age'] < 40),'age_level2'] = '30-39'
df_customer_order_bycle.loc[(df_customer_order_bycle['customer_age'] >= 40),'age_level2'] = '>=40'

你可能感兴趣的:(adventure第一部分函数知识点)