首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的Np随机采样

python中的Np随机采样
EN

Stack Overflow用户
提问于 2019-12-12 03:34:58
回答 2查看 50关注 0票数 1

我有两个pd数据表。我想通过使用df1中的权重分配随机速率,在df2中创建一个新列。

代码语言:javascript
复制
 df1 
      Income_Group      Rate     Weight
  0        1             3.5      0.5
  1        1             2.5      0.25 
  2        1             3.75     0.15
  3        1             5.0      0.15
  4        2             4.5      0.35
  5        2             2.5      0.25 
  6        2             4.75     0.20
  7        2             5.0      0.20
 ....
  30       8             2.25     0.75
  31       8             4.15     0.05
  32       8             6.35     0.20


 df2
        ID    Income_Group    State    Rate
   0    12     1              9        3.5
   1    13     2              6        4.5
   2    15     8              1        6.35
   3    8      1              5        2.5
   4    9      8              4        6.35
   5    17     2              3        4.75 
......   
  100   50     1              4        3.75

我尝试了以下代码:

代码语言:javascript
复制
  df2['Rate']=df1.groupby('Income_Group').apply(lambda gp.np.random.choice(a=gp.Rate, p=gp.Weight,      
              replace=True))

当然,代码不起作用。有人能帮我这个忙吗?提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-12 03:51:24

您的数据非常小,所以我们可以这样做:

代码语言:javascript
复制
rate_dict = df1.groupby('Income_Group')[['Rate', 'Weight']].agg(list)

df2['Rate'] = df2.Income_Group.apply(lambda x: np.random.choice(rate_dict.loc[x, 'Rate'], 
                                                  p=rate_dict.loc[x, 'Weight'])                      
                      )

或者你也可以在df2上做groupby

代码语言:javascript
复制
(df2.groupby('Income_Group')
    .Income_Group
    .transform(lambda x: np.random.choice(rate_dict.loc[x.iloc[0], 'Rate'], 
                                          size=len(x),
                                          p=rate_dict.loc[x.iloc[0], 'Weight']))
)
票数 2
EN

Stack Overflow用户

发布于 2019-12-12 03:45:25

您可以尝试:

代码语言:javascript
复制
df1 = pd.DataFrame([[1,3.5,.5], [1,2.5,.25], [1,3.75,.15]],
                   columns=['Income_Group', 'Rate', 'Weight'])

df2 = pd.DataFrame()
weights = np.random.rand(df1.shape[0])
df2['Rate'] = df1.Rate.values * weights
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59292844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档