根据不同的行需求创建正常估计的 Pandas 数据框

问题描述 投票:0回答:1

我知道这将创建单个样本的数据框:

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 添加一列,并使用基于区域的样本?

python pandas sample-data
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.