1、按條件篩選(與,或,非) 為數(shù)據(jù)篩選,使用與,或,非三個(gè)條件配合大于,小于和等于對(duì)數(shù)據(jù)進(jìn)行篩選,并進(jìn)行計(jì)數(shù)和求和。與 excel 中的篩選功能和 countifs 和 sumifs 功能相似。 Excel 數(shù)據(jù)目錄下提供了“篩選”功能,用于對(duì)數(shù)據(jù)表按不同的條件進(jìn)行篩選。Python 中使用 loc 函數(shù)配合篩選條件來完成篩選功能。配合 sum 和 count 函數(shù)還能實(shí)現(xiàn) excel 中 sumif 和 countif 函數(shù)的功能。 1)使用“與”條件進(jìn)行篩選 條件是年齡大于 25 歲,并且城市為 beijing。篩選后只有一條數(shù)據(jù)符合要求。 1#使用“與”條件進(jìn)行篩選 2df_inner.loc[(df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']] 2)使用“或”條件進(jìn)行篩選 年齡大于 25 歲或城市為 beijing。篩選后有 6 條數(shù)據(jù)符合要求。 1#使用“或”條件篩選 2df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']].sort 3(['age']) 3)求和 在前面的代碼后增加 price 字段以及 sum 函數(shù),按篩選后的結(jié)果將 price 字段值進(jìn)行求和,相當(dāng)于 excel 中 sumifs 的功能。 1 #對(duì)篩選后的數(shù)據(jù)按 price 字段進(jìn)行求和 2 df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), 3 ['id','city','age','category','gender','price']].sort(['age']).price.sum() 4)使用“非”條件進(jìn)行篩選 城市不等于 beijing。符合條件的數(shù)據(jù)有 4 條。將篩選結(jié)果按 id 列進(jìn)行排序。 1#使用“非”條件進(jìn)行篩選 2df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']) 在前面的代碼后面增加 city 列,并使用 count 函數(shù)進(jìn)行計(jì)數(shù)。相當(dāng)于 excel 中的 countifs 函數(shù)的功能。 1#對(duì)篩選后的數(shù)據(jù)按 city 列進(jìn)行計(jì)數(shù) 2df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']).city.count() 還有一種篩選的方式是用 query 函數(shù)。下面是具體的代碼和篩選結(jié)果。 1#使用 query 函數(shù)進(jìn)行篩選 2df_inner.query('city == ['beijing', 'shanghai']') 在前面的代碼后增加 price 字段和 sum 函數(shù)。對(duì)篩選后的 price 字段進(jìn)行求和,相當(dāng)于 excel 中的 sumifs 函數(shù)的功能。 1 #對(duì)篩選后的結(jié)果按 price 進(jìn)行求和 2 df_inner.query('city == ['beijing', 'shanghai']').price.sum() 3 12230 2、數(shù)據(jù)匯總 接下來是對(duì)數(shù)據(jù)進(jìn)行分類匯總,Excel 中使用分類匯總和數(shù)據(jù)透視可以按特定維度對(duì)數(shù)據(jù)進(jìn)行匯總,python 中使用的主要函數(shù)是 groupby 和 pivot_table。下面分別介紹這兩個(gè)函數(shù)的使用方法。 1)分類匯總 Excel 的數(shù)據(jù)目錄下提供了“分類匯總”功能,可以按指定的字段和匯總方式對(duì)數(shù)據(jù)表進(jìn)行匯總。Python 中通過 Groupby 函數(shù)完成相應(yīng)的操作,并可以支持多級(jí)分類匯總。 Groupby 是進(jìn)行分類匯總的函數(shù),使用方法很簡單,制定要分組的列名稱就可以,也可以同時(shí)制定多個(gè)列名稱,groupby 按列名稱出現(xiàn)的順序進(jìn)行分組。同時(shí)要制定分組后的匯總方式,常見的是計(jì)數(shù)和求和兩種。 1 #對(duì)所有列進(jìn)行計(jì)數(shù)匯總 2 df_inner.groupby('city').count() 可以在 groupby 中設(shè)置列名稱來對(duì)特定的列進(jìn)行匯總。下面的代碼中按城市對(duì) id 字段進(jìn)行匯總計(jì)數(shù)。 1 #對(duì)特定的 ID 列進(jìn)行計(jì)數(shù)匯總 2 df_inner.groupby('city')['id'].count() 3 city 4 beijing 2 5 guangzhou 1 6 shanghai 2 7 shenzhen 1 8 Name: id, dtype: int64 在前面的基礎(chǔ)上增加第二個(gè)列名稱,分布對(duì) city 和 size 兩個(gè)字段進(jìn)行計(jì)數(shù)匯總。 1 #對(duì)兩個(gè)字段進(jìn)行匯總計(jì)數(shù) 2 df_inner.groupby(['city','size'])['id'].count() 3 city size 4 beijing A 1 5 F 1 6 guangzhou A 1 7 shanghai A 1 8 B 1 9 shenzhen C 1 10 Name: id, dtype: int64 除了計(jì)數(shù)和求和外,還可以對(duì)匯總后的數(shù)據(jù)同時(shí)按多個(gè)維度進(jìn)行計(jì)算,下面的代碼中按城市對(duì) price 字段進(jìn)行匯總,并分別計(jì)算 price 的數(shù)量,總金額和平均金額。 1 #對(duì) city 字段進(jìn)行匯總并計(jì)算 price 的合計(jì)和均值。 2 df_inner.groupby('city')['price'].agg([len,np.sum, np.mean]) 2)數(shù)據(jù)透視 Excel 中的插入目錄下提供“數(shù)據(jù)透視表”功能對(duì)數(shù)據(jù)表按特定維度進(jìn)行匯總。Python 中也提供了數(shù)據(jù)透視表功能。通過 pivot_table 函數(shù)實(shí)現(xiàn)同樣的效果。 數(shù)據(jù)透視表也是常用的一種數(shù)據(jù)分類匯總方式,并且功能上比 groupby 要強(qiáng)大一些。下面的代碼中設(shè)定 city 為行字段,size 為列字段,price 為值字段。分別計(jì)算 price 的數(shù)量和金額并且按行與列進(jìn)行匯總。 1 #數(shù)據(jù)透視表 2pd.pivot_table(df_inner,index=['city'],values=['price'],columns=['size'],aggfunc=[len,np.sum],fill_value=0,margins=True) 文章來源:網(wǎng)絡(luò) 版權(quán)歸原作者所有 上文內(nèi)容不用于商業(yè)目的,如涉及知識(shí)產(chǎn)權(quán)問題,請權(quán)利人聯(lián)系小編,我們將立即處理 |
|