計(jì)算環(huán)比
環(huán)比增長(zhǎng)率=(本期數(shù)-上期數(shù))/上期數(shù)×100%

方法一:利用diff
函數(shù):DataFrame.diff(periods=1, axis=0)
periods:移動(dòng)的幅度,int類型,默認(rèn)值為1。
axis:移動(dòng)的方向,{0 or ‘index’, 1 or ‘columns’},如果為0或者’index’,則上下移動(dòng),如果為1或者’columns’,則左右移動(dòng)。
先利用sort_values(ascending = False)將順序按照月份降序排序。
再通過(guò)如下方式計(jì)算環(huán)比,要注意除以-1。同時(shí),用list將結(jié)果轉(zhuǎn)換為列表,方便增加和刪除元素。最后再用pd.DataFrame轉(zhuǎn)回dataframe格式。
order_num_diff = list((overall_sales_performance.order_num.diff()/overall_sales_performance.order_num)/-1)
order_num_diff.pop(0) #刪除列表中第一個(gè)元素
order_num_diff.append(0) #將0新增到列表末尾
order_num_diff
方法二:利用pct_change()
DataFrame.pct_change(periods=1, fill_method=‘pad’, limit=None, freq=None, **kwargs)
表示當(dāng)前元素與先前元素的相差百分比,當(dāng)然指定periods=n,表示當(dāng)前元素與先前n 個(gè)元素的相差百分比。
默認(rèn)情況下,計(jì)算與前一行的百分比變化。這在比較元素時(shí)間序列中的變化百分比時(shí)很有用。
參考文章
#pct_change()當(dāng)前元素與先前元素的相差百分比,求不同區(qū)域10月11月環(huán)比
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')的形式追加,需要追加一個(gè)序列,形如order_x=order_x.append(Series(['3'])),需要用原來(lái)的序列來(lái)接受。如果沒(méi)有設(shè)置索引,那么就會(huì)默認(rèn)從0開(kāi)始自動(dòng)設(shè)置索引。
~取對(duì)立面和str.contains
篩選出2019年的1-11月信息。
需要用兩個(gè)條件共同判斷。第一是用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()實(shí)現(xiàn)年齡分段(分箱)
pd.cut( x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', )
x : 一維數(shù)組
bins :整數(shù),標(biāo)量序列或者間隔索引,是進(jìn)行分組的依據(jù),
如果填入整數(shù)n,則表示將x中的數(shù)值分成等寬的n份(即每一組內(nèi)的最大值與最小值之差約相等);
如果是標(biāo)量序列,序列中的數(shù)值表示用來(lái)分檔的分界值
如果是間隔索引,“ bins”的間隔索引必須不重疊
right :布爾值,默認(rèn)為True表示包含最右側(cè)的數(shù)值
當(dāng)“ right = True”(默認(rèn)值)時(shí),則“ bins”=[1、2、3、4]表示(1,2],(2,3],(3,4]
當(dāng)bins是一個(gè)間隔索引時(shí),該參數(shù)被忽略。
labels : 數(shù)組或布爾值,可選.指定分箱的標(biāo)簽
如果是數(shù)組,長(zhǎng)度要與分箱個(gè)數(shù)一致,比如“ bins”=[1、2、3、4]表示(1,2],(2,3],(3,4]一共3個(gè)區(qū)間,則labels的長(zhǎng)度也就是標(biāo)簽的個(gè)數(shù)也要是3
如果為False,則僅返回分箱的整數(shù)指示符,即x中的數(shù)據(jù)在第幾個(gè)箱子里
當(dāng)bins是間隔索引時(shí),將忽略此參數(shù)
retbins: 是否顯示分箱的分界值。默認(rèn)為False,當(dāng)bins取整數(shù)時(shí)可以設(shè)置retbins=True以顯示分界值,得到劃分后的區(qū)間
precision:整數(shù),默認(rèn)3,存儲(chǔ)和顯示分箱標(biāo)簽的精度。
include_lowest:布爾值,表示區(qū)間的左邊是開(kāi)還是閉,默認(rèn)為false,也就是不包含區(qū)間左邊。
duplicates:如果分箱臨界值不唯一,則引發(fā)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()
通過(guò)loc新增一列,并且添加數(shù)值
如下,新增的列名為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'