如何使用数据帧作为panda的权重对数据帧进行采样



我想根据权重数据帧对数据帧的每列中的行进行采样。权重的数据帧的所有列的总和为1。

A=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]]).transpose()
w=pd.DataFrame([[0.2,0.5,0.3],[0.1,0.3,0.6],[0.4,0.5,0.1]])
sampled_data = A.sample(n=10, replace=True, weights=w)

但此代码会产生以下错误

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

显然,我希望根据w的第一列的权重对A的第一列进行采样,以此类推

使用这样的解决方案:

sampled_data =
1 2 3
0 2 6 8
1 2 5 7
2 3 4 8
. .....
9 1 6 9

听起来您需要来自每列的独立样本。如果是这样的话,我认为这就是你想要的:

import pandas as pd
A=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]]).transpose()
w=pd.DataFrame([[0.2,0.5,0.3],[0.1,0.3,0.6],[0.4,0.5,0.1]]).transpose()
L=[]
for i in [0,1,2]:
s=A[i].sample(n=10,replace=True,weights=w[i])
L.append(s.values)
A_sample=pd.DataFrame(L).transpose()
print(A_sample)

输出为

0  1  2
0  3  6  7
1  2  5  8
2  3  6  8
3  1  6  7
4  1  5  8
5  3  6  8
6  1  6  9
7  1  6  7
8  2  4  8
9  2  6  7

请注意,为了实现这一点,我将Aw作为原来的转置。

也许有一种更巧妙的方法可以做到这一点,但我不知道。

最新更新