You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于指定Pandas DataFrame计算频率并关联行后按最大频率归一化

处理DataFrame的频率计算、关联与归一化

嘿,我来一步步帮你搞定这个任务!首先咱们得明确操作逻辑:你的DataFrame里是连续的随机数值,直接算单个值的频率没太大实际意义,所以咱们先把数据分箱,计算每个分箱的出现频率,再把频率关联到对应行,最后做归一化处理。

步骤1:导入库并创建目标DataFrame

先把需要的库导入,再生成你指定的DataFrame:

import pandas as pd
import numpy as np

# 创建你需要的DataFrame
df = pd.DataFrame({'A': np.random.random(20), 'B': np.random.random(20)})

步骤2:对数据分箱(以列A为例,列B同理)

咱们用分位数分箱(pd.qcut)把数据分成5个等数量的区间,这样每个区间的样本数更均匀;如果你想要等距分箱,可以换成pd.cut:

# 对A列分箱,分成5个区间,保留区间标签
df['A_bin'] = pd.qcut(df['A'], q=5, duplicates='drop')
# 对B列执行同样的分箱操作
df['B_bin'] = pd.qcut(df['B'], q=5, duplicates='drop')

步骤3:计算分箱频率并关联到对应行

先算出每个分箱的频率(该分箱样本数占总样本数的比例),再用map把频率映射回原DataFrame的每一行:

# 计算A列各分箱的频率,转成字典方便映射
a_freq_dict = df['A_bin'].value_counts(normalize=True).to_dict()
# 把频率关联到每一行
df['A_freq'] = df['A_bin'].map(a_freq_dict)

# 对B列重复上述操作
b_freq_dict = df['B_bin'].value_counts(normalize=True).to_dict()
df['B_freq'] = df['B_bin'].map(b_freq_dict)

如果你想先算计数再转频率,可以去掉normalize=True,然后除以总样本数:df['A_bin'].value_counts() / len(df)。

步骤4:按最大频率做归一化

归一化就是把每个频率值除以该列的最大频率,这样归一化后的最大值为1,其他值按比例缩放:

# 对A列的频率做归一化
df['A_freq_normalized'] = df['A_freq'] / df['A_freq'].max()

# 对B列的频率做归一化
df['B_freq_normalized'] = df['B_freq'] / df['B_freq'].max()

最终效果示例

处理后的DataFrame大概长这样(因为是随机数据,具体数值会有差异):

A         B               A_bin               B_bin  A_freq  B_freq  A_freq_normalized  B_freq_normalized
0   0.888651  0.380360  (0.61454, 0.888651]  (0.279264, 0.534569]     0.2     0.2                1.0                1.0
1   0.513343  0.605991  (0.4653, 0.61454]    (0.534569, 0.725061]     0.2     0.2                1.0                1.0
2   0.560978  0.076174  (0.4653, 0.61454]    (0.014512, 0.228761]    0.2     0.2                1.0                1.0
...

要是你真的想计算单个原始数值的频率(而非分箱),直接去掉分箱步骤,对原始列做value_counts就行,但因为是随机浮点数,大概率每个值都是唯一的,频率都是1/20=0.05,归一化后全是1,这样其实没什么实用价值,所以分箱的方式更合理哦。

内容的提问来源于stack exchange,提问作者Eran Moshe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:25:23