如何在Pandas DataFrame中为唯一区域分配固定的0-1区间唯一随机浮点数列
如何在Pandas DataFrame中为唯一区域分配固定的0-1区间唯一随机浮点数列
我明白你的需求啦——给每个唯一的地区分配一个固定的0到1之间的随机浮点数,而且每次重新运行代码,这些数值都不会变对吧?你现在的问题是只生成了单个随机数,不知道怎么把随机数和每个地区一一绑定,下面我给你一步步解决这个问题:
核心思路
我们可以先创建一个**「地区-随机数」的映射字典**,给每个唯一地区分配专属的随机数(靠固定种子保证每次生成结果一致),再把这个字典映射到DataFrame的region列上,就能得到你想要的新列了。
完整实现代码
import pandas as pd import numpy as np import random list_reg = ['region1', 'region2', 'region3', 'region4', 'region5', 'region6'] df_test = pd.DataFrame({ 'region': list_reg, 'product1': [100, 250, 350, 555, 999999, 200000], 'product2': [41, 111, 12.14, 16.18, np.nan, 200003], 'product3': [7.04, 2.09, 11.14, 2000320, 22.17, np.nan], 'product4': [236, 249, 400, 0.56, 359, 122], 'product5': [None, 1.33, 2.54, 1, 0.9, 3.2]}) # 设置随机种子,确保每次运行生成的随机数完全一致 random.seed(123) # 用字典推导式给每个地区分配专属随机数 region_random_map = {region: random.uniform(0.0001, 1.0) for region in list_reg} # 新增列:把字典映射到region列,每个地区对应固定随机数 df_test['random_float'] = df_test['region'].map(region_random_map) # 查看最终结果 print(df_test)
代码说明
- 固定随机种子:
random.seed(123)会锁定随机数生成逻辑,不管你重新运行多少次,每个地区对应的随机数都不会变。 - 映射字典:通过字典推导式遍历所有唯一地区,给每个地区生成0.0001到1之间的随机浮点数,保证每个地区对应唯一值。
- 生成新列:
map方法会自动把region列的每个值匹配到字典里对应的随机数,哪怕你的DataFrame里有重复的地区行(比如同一个region出现多次),也会统一映射到同一个随机数。
运行结果示例
| region | product1 | product2 | product3 | product4 | product5 | random_float |
|---|---|---|---|---|---|---|
| region1 | 100 | 41.0 | 7.04 | 236 | None | 0.052363 |
| region2 | 250 | 111.0 | 2.09 | 249 | 1.33 | 0.087186 |
| region3 | 350 | 12.14 | 11.14 | 400 | 2.54 | 0.407241 |
| region4 | 555 | 16.18 | 2000320 | 0.56 | 1.0 | 0.022921 |
| region5 | 999999 | NaN | 22.17 | 359 | 0.9 | 0.442143 |
| region6 | 200000 | 200003.0 | NaN | 122 | 3.2 | 0.794025 |
(注:因为种子固定为123,你运行代码得到的随机数和上面的示例完全一致)
备注:内容来源于stack exchange,提问作者user032020
相关产品推荐
相关产品推荐

