我正在使用名为df_data
的pandas DataFrame
中的以下面板数据:
y x
n time
0 0 0.423607 -0.307983
1 0.565563 -0.333430
2 0.735979 -0.453137
3 0.962857 1.671106
1 0 0.772304 1.221366
1 0.455327 -1.024852
2 0.864768 0.609867
3 0.334429 -2.567936
2 0 0.435553 -0.259228
1 0.221501 0.484677
2 0.773628 0.650288
3 0.293902 0.566452
n
索引一个个体(共500个),t
索引时间。这是一个平衡面板数据。我想创建一个有放回的随机样本,包括nn=100
个个体。另外,如果一个个体进入了随机样本,那么该个体的所有4个时间观测(t=0,1,2,3)都应该分配给样本。
下面这行代码几乎满足我的需求:
df_sample = df_data.loc[np.random.randint(3, size=100).tolist()]
然而,它不会重复抽样个体。所以如果随机变量的列表是 [2, 3, 2, 4, 1, ...] ,那么第三个个体 (索引=2 是第三个个体) 只被选取一次而不是两次进入随机样本。这意味着只要上述随机向量包含同一个个体超过一次,我最终会得到少于100个个体(每个个体有4次观察结果)的随机样本。 我还尝试了
df_data.sample
函数,但它似乎不能处理我这里在面板中具有特定多级索引的情况。
我可以写各种循环来完成这个任务,但我认为应该有一种更简单(并且更快)的方法来完成这个任务。
我使用 Python 3.5,并且使用 pandas 版本 0.17.1。
谢谢。