如何在Pandas中实现输入列名列表统计分类频率的函数
实现方案
pandas内置的value_counts方法是经过底层优化的统计接口,完全匹配你的需求,性能远高于自行实现遍历计数,实现代码如下:
import pandas as pd from typing import List # 初始化数据集 data = pd.DataFrame({ 'A': ["A", "A", "A", "B", "B", "B", "A", "A", "A", "A", "B"], 'B': ["C", "D", "C", "C", "D", "C", "C", "D", "D", "C", "D"], 'C': ["A1", "A2", "A1", "A1", "A2", "A3", "A4", "A2", "A1", "A1", "A2"] }) def func(cols: List[str]) -> List[int]: # value_counts默认按出现频率降序排序,直接转列表即可匹配示例输出 return data[cols].value_counts(sort=True, ascending=False).tolist()
效果验证
执行测试代码输出完全符合你的示例:
print(func(["A"])) # 输出 [7, 4] print(func(["A", "B"])) # 输出 [4, 3, 2, 2]
性能说明
该方案基于pandas矢量化操作实现,即使是百万行级别的数据集也能保持很高的执行效率,不需要额外优化。如果不需要按频率排序,可以把sort参数设为False,执行速度会更快,但返回的频率顺序会和分类组合的出现顺序一致。
内容的提问来源于stack exchange,提问作者user3104352
相关产品推荐
相关产品推荐

