我知道这将创建单个样本的数据框:
samples = np.random.normal(loc=df_avgs['AVERAGE'][region], scale=df_avgs['STDEV'][region], size=1)
但我想根据条件为每一行创建一个样本。例如,我有一个均值 df、stdev 和一个条件 df。
df_avgs
地区 | 平均 | 标准偏差 |
---|---|---|
0 | -1.61 | 7.75 |
1 | 2.87 | 8.38 |
2 | 3.61 | 7.61 |
3 | -10.26 | 9.19 |
df_条件
身份证 | REGION_NAME |
---|---|
0 | 0 区 |
1 | 3区 |
2 | 2区 |
3 | 1区 |
4 | 1区 |
5 | 2区 |
6 | 3区 |
如何创建长度为(df_conditions)的 df 或者仅向 df_conditions 添加一列,并使用基于区域的样本?
IIUC,您可以将两个数据帧合并在一起,然后使用列表理解和两个数据帧列的压缩来分配值:
df_zip = df_conditions.assign(REGION=df_conditions['REGION_NAME'].str.extract('([0-9])').astype(int)).merge(df_avgs)
df_conditions['SAMPLES'] = [np.random.normal(loc=l, scale=s, size=1)[0] for l, s in zip(df_zip['AVERAGE'], df_zip['STDEV'])]
print(df_conditions)
输出:
ID REGION_NAME SAMPLES
0 0 Region 0 -2.475624
1 1 Region 3 -7.157439
2 2 Region 2 -4.563650
3 3 Region 1 -2.199240
4 4 Region 1 5.221416
5 5 Region 2 7.175620
6 6 Region 3 -22.775366