前幾天頭條的“指在弦上”問我一個關於TXT統計數據及分組的問題,想讓我分享一下相關的腳本,私信中說不太清楚,留了郵箱,讓把原始數據樣本發給我,同時把希望的結果也說明一下,大概是這樣子的:
上面這個是他的原始數據,是一個逗號分隔的TXT。
他希望能完成這樣的:
而他在ACCESS裡用SQL是這樣完成的:
今天下午剛好有時間,就幫這位朋友寫了一個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輸出的結果是這樣的:
其實這段代碼還可以優化,等有空了再優化一下。
閱讀更多 aovs 的文章