如何为Pandas中value_counts输出的分箱区间添加自定义标签或重命名
如何为Pandas中value_counts输出的分箱区间添加自定义标签或重命名
嘿,这个问题我之前也碰到过,其实有两种超简单的解决思路,咱们一起来看看:
方法一:直接生成带自定义标签的分箱并统计频次
其实不用绕弯路,pd.cut本身就支持给分箱指定自定义标签,我们先把数据用pd.cut处理成带目标标签的Series,再直接对它做value_counts就行,一步到位:
import pandas as pd data = [{'A': 1, 'B': "Jim"}, {'A': 5, 'B': "Jim"}, {'A': 2, 'B': "Bob"}, {'A': 3, 'B': "Bob"}] df = pd.DataFrame(data) mBins = [-1, 2, 4, 6] mLabels = ["0-2", "3-4", "5-6"] # 先给A列分箱并赋予自定义标签,再统计每个标签的数量 binned_counts = pd.cut(df["A"], bins=mBins, labels=mLabels).value_counts() print(binned_counts)
运行后输出就是你想要的结果:
0-2 2 3-4 1 5-6 1 Name: A, dtype: int64
这里pd.cut会自动把每个数值匹配到对应的区间,并用你指定的mLabels替换掉默认的区间字符串,之后统计频次自然就得到了带友好标签的结果。
方法二:重命名已有的分箱统计结果
如果你已经用value_counts(bins=mBins)得到了原始的区间统计结果,也可以直接给索引重命名来替换成自定义标签。需要注意的是,默认的区间是Pandas的Interval类型,但我们可以直接按顺序给索引赋值新标签:
import pandas as pd data = [{'A': 1, 'B': "Jim"}, {'A': 5, 'B': "Jim"}, {'A': 2, 'B': "Bob"}, {'A': 3, 'B': "Bob"}] df = pd.DataFrame(data) mBins = [-1, 2, 4, 6] mLabels = ["0-2", "3-4", "5-6"] simple_VC = df["A"].value_counts(bins=mBins, sort=False) # 按分箱顺序替换索引为自定义标签 simple_VC.index = mLabels print(simple_VC)
这里建议加上sort=False,这样分箱的顺序会和你定义的mBins顺序完全一致,避免重命名时出现顺序错乱的问题。运行后的输出同样符合预期:
0-2 2 3-4 1 5-6 1 Name: A, dtype: int64
备注:内容来源于stack exchange,提问作者DrWhat
相关产品推荐
相关产品推荐

