[英]Counting qualitative values based on the date range in Pandas
我正在學習使用Pandas庫,需要進行分析並繪制下面的犯罪數據集。 每一行代表一次犯罪。 date_rep列包含一年的每日日期。
數據需要按月分組,特定犯罪的實例需要每月累計,如下表所示。
我遇到的問題是犯罪列中的數據是定性的,我只是無法在線找到可以幫助我解決這個問題的資源!
我一直在閱讀groupby和不同的排序方法,但實現這一目標的最有效方法是什么? 先感謝您!
要復制您的數據:
In [29]: df = pd.DataFrame({'date_rep':pd.date_range('2012-01-01', periods=100),
...: 'crm_cd_desc':np.random.choice(['robbery', 'traffic', 'assault'], size=100)})
In [30]: df.head()
Out[30]:
crm_cd_desc date_rep
0 traffic 2012-01-01
1 traffic 2012-01-02
2 assault 2012-01-03
3 robbery 2012-01-04
從本質上講,你想要做的是一個價值計數 :
In [31]: df['crm_cd_desc'].value_counts()
Out[31]:
assault 36
traffic 34
robbery 30
dtype: int64
但是,您希望每個月分別執行此操作。 要按月分組,可以使用groupby
pd.Grouper
指定月份:
In [34]: df.groupby(pd.Grouper(key='date_rep', freq='M'))['crm_cd_desc'].value_counts()
Out[34]:
date_rep
2012-01-31 traffic 12
robbery 10
assault 9
2012-02-29 assault 13
traffic 11
robbery 5
2012-03-31 assault 12
robbery 10
traffic 9
2012-04-30 robbery 5
assault 2
traffic 2
dtype: int64
然后unstack
以獲得結果:
In [35]: df.groupby(pd.Grouper(key='date_rep', freq='M'))['crm_cd_desc'].value_counts().unstack()
Out[35]:
assault robbery traffic
date_rep
2012-01-31 9 10 12
2012-02-29 13 5 11
2012-03-31 12 10 9
2012-04-30 2 5 2
您也可以按月和犯罪類型進行分組,然后計算每個組的長度,而不是使用value_counts
:
In [46]: df.groupby([pd.Grouper(key='date_rep', freq='M'), 'crm_cd_desc']).size().unstack()
Out[46]:
crm_cd_desc assault robbery traffic
date_rep
2012-01-31 9 10 12
2012-02-29 13 5 11
2012-03-31 12 10 9
2012-04-30 2 5 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.