Если весь наш набор данных выглядит следующим образом:
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
. По умолчанию эта функция будет работать без замены. Это означает, что вы получите ошибку, указав число наблюдений, превышающее количество наблюдений в вашем начальном наборе данных:
df.sample(20)
ValueError: Cannot take a larger sample than population when 'replace=False'
В вашей ситуации ошибка ValueError происходит из параметра weights
:
df.sample(3,weights='c1')
ValueError: Fewer non-zero entries in p than size
Перефразируя документы DataFrame.sample , используя столбец c1 в качестве нашего весового параметра, подразумевается, что строки с большим значением в c1 столбец с большей вероятностью будет выбран. В частности, функция sample
не будет выбирать значения из этого столбца, которые являются нулевыми. Мы можем исправить эту ошибку, используя один из следующих методов:
Метод 1: Установите для параметра replace
значение true:
m1 = df.sample(3,weights='c1', replace=True)
print(m1)
c1 c2
0 1 1
7 1 8
0 1 1
Метод 2: Убедитесь, что параметр n
равен или меньше числа 1 в столбце c1 :
m2 = df.sample(2,weights='c1')
print(m2)
c1 c2
7 1 8
0 1 1
Если вы решили использовать этот метод, вы не будете на самом деле выборки. Вы действительно просто отфильтровываете все строки, где значение c1 равно 0.