在熊猫中使用概率列随机抽样行。

我使用python和pandas从一个数据框中随机抽取样本,我的数据框是这样的。

第一列包含时间,第二列是平均率,第三列是1-sigma,第四列是与该行描述的事件相关的概率。

enter image description here

我知道我可以用这段代码来绘制加权样本。

random=df.sample(n=100000, replace=True, weights='P>0', axis=0)

但我不确定概率是否是正确的 “权重”。简而言之,我需要一个低P>0的值比一个P>0的值的采样频率低。

有谁愿意就此分享意见不同的方案吗?

谢谢你

解决方案:

使用’P>0’列作为权重,确实会导致那些P值较高的值比那些值较低的值被采样的次数多。但要注意的是,一行的P值并不对应于被抽样的概率,因为Ps的总和并不是1。首先pandas会对列P进行归一化处理,使其加起来确实是1,然后根据这些归一化的概率进行抽样。

下面是我做的一个快速测试,可以证明这一点。首先,我生成一个数据框,其中包含一个带有权重的列P(未归一化),然后我从数据框中取样,列P给出的权重在0和1之间,每个权重的行数相等。你可以在输出中看到,权重较高的行比权重较低的行在采样结果中占的比例更大。

import pandas as pd
import numpy as np

ps = np.tile(np.arange(0,1,0.1),1000)
df = pd.DataFrame({"id":range(0,10000),"P":ps})

print(df.sample(1000,weights="P")["P"].value_counts(normalize=True))
>>>
0.9    0.207
0.8    0.188
0.7    0.152
0.6    0.119
0.5    0.109
0.4    0.084
0.3    0.065
0.2    0.052
0.1    0.024
Name: P, dtype: float64

给TA打赏
共{{data.count}}人
人已打赏
未分类

在C#中压缩两个列表

2022-9-9 2:23:18

未分类

将承诺值存储到变量中不解析nodejs。

2022-9-9 2:23:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索