#python #pandas #numpy #jupyter-notebook #jupyter
#python #pandas #numpy #jupyter-notebook #jupyter
Вопрос:
Я пытаюсь выбрать 2 случайных значения из фрейма данных, где выполняется условие. Пожалуйста, приведите пример df ниже:
data = {'col1': ['abc', 'def','ghi','jkl','mno','pqr','stu','vwx','yz'],
'col2': ['4', '1','4','4','0','1','4','2','4'],
'col3': ['Sweden', 'Malaysia','Sweden','Venezuela','France','Sweden','Australia','Belgium','Sweden']
}
df = pd.DataFrame (data, columns = ['col1','col2','col3'])
Я хочу выбрать 2 случайных значения из ‘col1’, где ‘col2’ равно 4. Код, который я затем использую, является:
print(df['col1'].sample(n=2).where(df['col2']==4))
При этом желаемый результат является:
0 abc
6 stu
….или
8 yz
2 ghi
Однако в настоящее время код выдает такие результаты, как:
7 NaN
3 NaN
Это нежелательно в том смысле, что а) я ожидаю увидеть строковое значение в виде текста и б) в то время как значение, соответствующее строке 3, будет соответствовать критериям, значение, соответствующее строке 7, нет, поэтому критерии выполняются не во всех случаях.
ВОПРОСЫ:
- Как бы мне изменить свой код таким образом, чтобы он возвращал текстовые значения и только в том случае, если выполняется условие
- Как бы мне добавить второе условие, например
.where(df['col2']==4) amp; (df['col3']=='Sweden')
Благодарен за любые рекомендации здесь.
Ответ №1:
Возможно, было бы проще сначала отфильтровать ваши данные. Я не уверен, хотите ли вы конкретно использовать .where()
, но если нет, это также поможет на вашем следующем шаге добавления дополнительных критериев.
Кроме того, я думаю, что часть вашей проблемы заключается в том, что в вашем df значения col2 являются строками, поэтому вам нужно, чтобы ваша формула находила ‘4’ вместо числа 4.
df.loc[df['col2'] == '4','col1'].sample(n=2)
Комментарии:
1. Для дополнительного условия я буду использовать следующий код:
df.loc[(df['col2'] == '4') amp; (df['col3'] == 'Sweden'),'col1'].sample(n=2)