[英]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.