【发布时间】:2021-09-07 12:07:37
【问题描述】:
我想根据权重数据框从数据框的每一列中采样行。 权重数据框的所有列的总和为 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
【问题讨论】:
-
weightsis undefined 那应该是weights=w吗? -
是的,我刚刚编辑了这个问题,谢谢
-
那我不清楚逻辑。
sample需要一个 (1D) 权重列表来确定如何选择row。但似乎每个细胞都有自己的重量。权重是什么意思? -
我希望A的每一列都按照w中相同索引的列进行采样
-
根据我的理解,第一个数据帧的每一行似乎都对应于新数据帧中的一个列值。这不是示例操作,因为您不是从
A中采样行,而是根据权重生成随机值。这个问题看起来更像是如何根据n值列表和n权重列表随机生成m行和n列。至于这样做的合理方式,我不确定。
标签: python pandas numpy random sample-data