我的代码使用一列称为“预订状态”的列,“是”为1,“否”为0(还有许多其他列,信息将取决于预订状态而从中获取)-除了“是”以外,还有很多其他内容,因此我想用所有“是”和相同数量的“否”进行采样。
我使用时
samp = rslt_df.sample(n=298, random_state=1, weights='bookingstatus')
我收到错误:
ValueError:p中的非零条目少于大小
是否可以通过这种方式进行此示例?
print(df)
c1 c2
0 1 1
1 0 2
2 0 3
3 0 4
4 0 5
5 0 6
6 0 7
7 1 8
8 0 9
9 0 10
我们可能决定使用DataFrame.sample
函数从中进行采样。默认情况下,该函数将采样而不进行替换。意思是,如果您指定的观察数大于初始数据集中的观察数,则会收到错误消息:
DataFrame.sample
根据您的情况,ValueError来自df.sample(20) ValueError: Cannot take a larger sample than population when 'replace=False'
参数:
weights
用[[c1列作为我们的权重参数来解释df.sample(3,weights='c1') ValueError: Fewer non-zero entries in p than size
文档,这意味着c1列中具有较大值的行更可能被采样。具体来说,DataFrame.sample函数不会从此列中选择零值。我们可以使用以下任一方法解决此错误。
方法1:将replace设置为true:
sample
方法2:确保
m1 = df.sample(3,weights='c1', replace=True)
print(m1)
c1 c2
0 1 1
7 1 8
0 1 1
参数等于或小于c1列中的1s:
n
如果您决定使用此方法,则您实际上不会进行抽样。您实际上只是过滤掉c1的值为0的任何行。