python pandas 數據分組計數統計

前幾天頭條的“指在弦上”問我一個關於TXT統計數據及分組的問題,想讓我分享一下相關的腳本,私信中說不太清楚,留了郵箱,讓把原始數據樣本發給我,同時把希望的結果也說明一下,大概是這樣子的:

python pandas 數據分組計數統計

上面這個是他的原始數據,是一個逗號分隔的TXT。

他希望能完成這樣的:

python pandas 數據分組計數統計

而他在ACCESS裡用SQL是這樣完成的:

python pandas 數據分組計數統計

今天下午剛好有時間,就幫這位朋友寫了一個Python的腳本,主要是用到pandas庫,思路是確定“地市”裡的惟一值,然後對各個消費區間進行計數,最後輸出結果,源代碼如下:

# -*- coding: utf-8 -*-

"""

Created on Thu Sep 20 16:20:40 2018

@author: chenht40

"""

import pandas as pd # 導入pandas

df = pd.read_table('H:\python-group-select\data.txt', sep = ',') # 先讀取文件

city = df['地市'].value_counts() # 不同地市數據總數計數,生成Series

target = pd.DataFrame(city) # 將Series轉為DataFrame

target.columns = ['總數'] # 更改列名為“總數”

yuan015 = df.loc[(df['本月消費'] > 0) & (df['本月消費'] <= 15) ] # 對0-15元的進行篩選

target['0-15元'] = yuan015['地市'].value_counts() # 將0-15元計數後加入後一列

yuan1525 = df.loc[(df['本月消費'] <= 25) & (df['本月消費'] > 15)] # 對15-25元的進行篩選

target['15-25元'] = yuan1525['地市'].value_counts() # 將15-25元計數後加入後一列

yuan2535 = df.loc[(df['本月消費'] <= 35) & (df['本月消費'] > 25)] # 對25-35元的進行篩選

target['25-35元'] = yuan2535['地市'].value_counts() # 將25-35元計數後加入後一列

yuan3545 = df.loc[(df['本月消費'] <= 45) & (df['本月消費'] > 35)] # 對35-45元的進行篩選

target['35-45元'] = yuan3545['地市'].value_counts() # 將35-45元計數後加入後一列

yuan45 = df.loc[df['本月消費'] > 45] # 對45元以上的進行篩選

target['45元以上'] = yuan45['地市'].value_counts() # 將5元以上計數後加入後一列

target.fillna(0, inplace=True) # 對空值用0進行填充

print (target)

target.to_csv('分組篩選統計.csv', encoding = 'gbk') # 將結果輸出

最後用Python輸出的結果是這樣的:

python pandas 數據分組計數統計

其實這段代碼還可以優化,等有空了再優化一下。


分享到:


相關文章: