Как сохранить процент данных из фрейма данных pandas?

#python-3.x #pandas

#python-3.x #pandas

Вопрос:

Допустим, у меня есть фрейм данных pandas, подобный этому:

 CustomerId    Product
1             Apple
2             Orange
3             Apple
4             Watermelon
...           ...
1000          Apple
  

Предположим, что у меня есть 500 яблок в столбце product. Я хотел бы сохранить фрейм данных, который содержит 10% из 500 яблок (и 100% из других категорий, то есть я хотел бы иметь фрейм данных с 550 строками). Есть ли способ сделать это эффективно? Могут ли эти 10% оставшихся яблок быть выбраны случайным образом?

Ответ №1:

Найдите строки apple:

 apples = df["Product"] == 'Apple'
  

Случайным образом выбирайте строки для сохранения:

 HOW_MANY = 0.1 # 10%
keep = np.random.binomial(1, HOW_MANY, size=apples.sum()).astype(bool)
  

Объедините строки, отличные от apple, и строки Apple, чтобы сохранить:

 results = pd.concat([df[~apples], df[apples][keep]])
  

Ответ №2:

Для этого вы могли бы использовать df.sample, который возвращает случайную выборку элементов:

 condition = df['Product'] != 'Apple'
df_all = df[condition] #This data frame has 100% of all products
df_apple = df[~condition]
percent = int(o.1*df_apple.shape[0]) # calculate 10% of Apple products
df_all = df_all.append(df_all.sample(percent)) #Append random items of apple to df_all
  

Конечно, количество фреймов данных можно уменьшить, для лучшего понимания используется больше переменных.