#python #pandas #dataframe #numpy #data-science
#python #pandas #фрейм данных #numpy #наука о данных
Вопрос:
У меня есть фрейм данных pandas df
с несколькими столбцами. Теперь я хочу добавить новый столбец на основе других значений столбца. Я нашел много ответов на это в стеке, который включает np.where
в себя и np.select
. Однако в моем случае для каждого условия if (каждого блока if / elif / else) новый столбец должен выбирать из 3 значений с определенным соотношением. Например,
for i in range(df.shape[0]):
if(df.iloc[i]['col1']==x):
df.iloc[i]['new_col']= choose one value between l=['a','b','c'] in 0.3,0.3,0.4 ratio
то есть для всех строк, удовлетворяющих условию в if
инструкции, элементы списка l
должны быть распределены в указанном выше соотношении к новому столбцу.
- Текущий способ, которым я занимаюсь, — разделить его
df
на несколько фреймов данныхdf_sub
для каждогоif-else
условного оператора. Затем создайте список, используяnp.random.choices(l,df_sub.shape[0],p=[0.3,0.3,0.4)
wherel=['a','b','c']
. Добавьтеl
вdf_sub
качестве нового столбца, а затем присоедините все эти вспомогательные фреймы данныхaxis=0
. - Я хочу знать, есть ли более простой способ выполнить эту задачу вместо разделения и объединения фреймов данных?
Ответ №1:
Попробуйте:
s = df['col1'] == x
df.loc[s, 'new_col'] = np.random.choice(['a','b','c'],
size=s.sum(),
p=[0.3,0.3,0.4])