回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试在熊猫中实现块引导。在</p>
<p>例如,假设我的数据帧看起来像:</p>
<pre><code>df = pd.DataFrame({
'personid': [1, 1, 1, 2, 2, 3, 3, 3, 3],
'month': ['Jan', 'Feb', 'Mar', 'Aug', 'Sep', 'Mar', 'Apr', 'May', 'Jun'],
'values': [100, 200, 300, 400, 500, 600, 700, 800, 900],
})
df
month personid value
0 Jan 1 100
1 Feb 1 200
2 Mar 1 300
3 Aug 2 400
4 Sep 2 500
5 Mar 3 600
6 Apr 3 700
7 May 3 800
8 Jun 3 900
</code></pre>
<p>尤其是,DataFame在<code>month</code>,<code>personid</code>是唯一的,并且实际上包含许多行,其中每个{<cd2>}与不同的月份数相关联。在</p>
<p>我想在<code>personid</code>级别实现“块引导”。也就是说,我希望从<code>personid</code>中所有唯一值的集合中进行替换,然后从该示例返回一个包含所有相关的<code>month</code>和{<cd7>}列的数据帧。在</p>
<p>例如,我有这样一个例子:</p>
^{pr2}$
<p>在这种情况下会导致</p>
<pre><code> array([1, 2, 3])
</code></pre>
<p>那么我会用样品替换:</p>
<pre><code>np.random.choice(personids, size=personids.size, replace=True)
</code></pre>
<p>在这种情况下,这可能导致:</p>
<pre><code>array([3, 3, 2])
</code></pre>
<p>所以现在,如果这就是抽样结果,我想要一个引导的数据帧,把它称为<code>bootstrapped_df</code>,这样<code>bootstrapped_df</code>等于:</p>
<pre><code> month personid value
0 Mar 3 600
1 Apr 3 700
2 May 3 800
3 Jun 3 900
4 Mar 3 600
5 Apr 3 700
6 May 3 800
7 Jun 3 900
8 Aug 2 400
9 Sep 2 500
</code></pre>
<p>到目前为止,我的做法是:</p>
<pre><code>def create_bootstrapped_df(df, sampled_personids):
"""
Create "Block" Bootstrapped DataFrame given a vector of sampled_personids
Keyword Args:
df: DataFrame containing cost data at the personid, month level
sampled_personids: A vector of personids that is already sampled with replacement.
"""
bootstrapped = []
for person in sampled_personids:
person_df = df.loc[df.personid == person]
bootstrapped.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(person_df)
bootstrapped_sample = pd.concat(bootstrapped)
bootstrapped_sample.reset_index(drop=True, inplace=True)
return bootstrapped_sample
</code></pre>
<p>基本上,该函数的作用是循环通过采样的拟人向量,并将原始数据帧子集,提取每个拟人。然后它把所有的东西连接在一起。恐怕这效率很低。有更好的方法吗?在</p>