如何使用Pandas计算序列的最大最小不同值及其对应出现频率
实现方案
核心逻辑
pandas的value_counts()方法返回的是一个Series对象:
- 该Series的索引是列的原始唯一取值
- 该Series的值对应每个原始取值的出现频次
因此你只需要对Series的索引做极值查询,就能拿到对应的频次。
调整后完整代码
import pandas as pd def main(): s = pd.read_csv('A1-dm.csv') print("******************************************************") print("Entropy Discretization STARTED") s = entropy_discretization(s) print("Entropy Discretization COMPLETED") def entropy_discretization(s): I = {} i = 0 n = s.nunique()['A1'] print("******************") print("calculating maxf") max_value, max_freq = maxf(s['A1']) print(f"maxValue = {max_value}, maxF = {max_freq}") print("******************") print("calculating minf") min_value, min_freq = minf(s['A1']) print(f"minValue = {min_value}, minF = {min_freq}") print("******************") # 此处保留你原有的熵离散化逻辑即可 return s def maxf(s): vc = s.value_counts() # 取原始取值的最大值 max_val = vc.index.max() # 取该最大值对应的频次 max_freq = vc[max_val] return max_val, max_freq def minf(s): vc = s.value_counts() # 取原始取值的最小值 min_val = vc.index.min() # 取该最小值对应的频次 min_freq = vc[min_val] return min_val, min_freq if __name__ == "__main__": main()
补充说明
如果你后续需要取频次本身的最大/最小值(比如示例中频次最高的是42,对应取值2;频次最低的是1,对应取值3和4),可以调整逻辑为:
- 最大频次:
vc.max(),对应取值:vc[vc == vc.max()].index.tolist() - 最小频次:
vc.min(),对应取值:vc[vc == vc.min()].index.tolist()
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

