iszero = df.amount.values == 0
count_zeros = iszero.sum()
idx = np.arange(iszero.shape[0])
keep_these = np.random.choice(idx[iszero], int(iszero.sum() * 0.5), replace
    =False)
df.iloc[np.sort(np.concatenate([idx[~iszero], keep_these]))]
Как случайным образом выбрать некоторые строки данных pandas?