python - 为 pandas 数据框均匀分配随机值

标签 python pandas dataframe random

我有 pandas 数据框,说 df 看起来像

Region  ID
A       111
A       222
A       333
A       444
B       555
B       666
B       777
C       888
C       999

ID 列有其权重。本例中,A的权重为2,B的权重为2,C的权重为1。

权重永远不会超过“Region”列中值的数量,这意味着 A 的权重永远不会超过 4,因为我们有 4 条 A 记录

我想创建一个新列,并在该列中根据 ID 列中的权重分配随机整数值,但这些随机值必须均匀分布。为了更清楚起见,我希望新的数据框应该如下所示

Region  ID   Random_Value
A       111      1
A       222      2 
A       333      1
A       444      2
B       555      2
B       666      2
B       777      1
C       888      1
C       999      1

当“Region”列中的值是奇数时,例如“B”,我想平均分配随机值,但其余部分可以具有任何随机整数值。

当“Region”列中的值是偶数时,例如“A”且其权重为 2,我需要分配从 1 到 2(含)的随机整数值,并且这些随机整数的数量应该相等。

我尝试了很多方法,但没有成功。有办法解决这个问题吗?

我的代码如下:

df['Random_Value'] = np.nan

A = df['region'] == 'A'

df.loc[A, 'Random_Value'] = np.random.randint(1,3, size=A.sum())

最佳答案

假设您让字典存储每个区域的权重。

weight_dict = {'A':2, 'B':2, 'C':1}

我用过。

  1. groupy 然后循环它以从 dataframe 获取每个组。
  2. np.rangeweight_dict 生成可能的权重。
  3. np.repeat 生成随机值。
  4. np.random.choicereplace=False 一起获取不进行替换的值。

然后使用 np.concatenate 创建新列来组合列表。

ls = []

for idx, d in df.groupby('Region'):

    group_size = d.shape[0]

    weight_range = np.arange(1, weight_dict[idx]+1)

    combination = np.repeat(weight_range, np.ceil(group_size/len(weight_range)))

    ls.append(np.random.choice(combination, group_size, replace=False))

df['Random_Value'] = np.concatenate(ls)

df

  Region   ID  Random_Value
0      A  111             2
1      A  222             1
2      A  333             1
3      A  444             2
4      B  555             1
5      B  666             2
6      B  777             2
7      C  888             1
8      C  999             1

您可以尝试打印每个变量以查看循环中发生了什么。

关于python - 为 pandas 数据框均匀分配随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55587228/

相关文章:

python - 无法将文件添加到 Scrapy Cloud 并在 ScrapyProxies 的 Settings.py 中使用它

python - 停用 QT Designer 中的复选框

python - 错误: pandas hashtable keyerror

python - Riak 在存储 key 时返回锁定状态

python - 如何在 Django 模型中存储语言环境?

python - Pandas fillna with method=None (默认值)会引发错误

python - 匹配存储在另一个数据框中的列名称并替换为其 ID

python - 如何将 pandas DataFrame 拆分为多个 DataFrame?

python Pandas : Get single max numeric value from df with floats and characters/alphas

r - 使用 for 循环获取数据帧的第 n 列