[英]Count occurrences within range
我有一個像這樣的數據集:
ID Amt TYPE
1 1000 A
2 200 NA
3 1100 S
我需要計算每種類型在特定范圍內的出現次數:
Range A_Count NA_Count S_Count
0-1000 1 1 0
1001-2000 0 0 1
我很想得到這個,以便我可以使用這個數據框繪制一個圖,以范圍為 x 軸,計數為 y 軸。 我如何實現這一目標?
首先cut()
將金額划分為范圍,然后crosstab()
與類型:
df['Range'] = pd.cut(df.Amt, bins=[0, 1000, 2000])
tab = pd.crosstab(df.Range, df.TYPE).add_suffix('_Count')
# TYPE A_Count NA_Count S_Count
# Range
# (0, 1000] 1 1 0
# (1000, 2000] 0 0 1
請注意,如果NA
此處表示NaN
,則在制表時將它們replace()
為字符串:
tab = pd.crosstab(df.Range, df.TYPE.replace(np.nan, 'NA')).add_suffix('_Count')
默認情況下,制表將丟棄空箱。 如果要保留所有垃圾箱,請使用dropna=False
:
tab = pd.crosstab(df.Range, df.TYPE, dropna=False).add_suffix('_Count')
使用DataFrame.plot.bar()
繪制交叉表:
tab.plot.bar()
sns.barplot(
data=tab.reset_index().melt('Range', value_name='Count'),
x='Range',
y='Count',
hue='TYPE',
)
您可以使用pandas.cut和pandas.DataFrame.unstack
df['group'] = pd.cut(df.Amt, [0,1000,1100])
(df.groupby('group')
['TYPE'].value_counts(dropna=False)
.unstack(-1)
.fillna(0)
.add_suffix('_count')
)
輸出:
TYPE nan_count A_count S_count
group
(0, 1000] 1.0 1.0 0.0
(1000, 1100] 0.0 0.0 1.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.