Добавление новой строки в фрейм данных с правильным отображением в пандах
Что-то похожее на приведенный выше вопрос.
carrier_plan_identifier ... hios_issuer_identifier
1 AUSK ... 99806.0
2 AUSM ... 99806.0
3 AUSN ... 99806.0
4 AUSS ... 99806.0
5 AUST ... 99806.0
Мне нужно выбрать несколько столбцов,скажем, carrier_plan_identifier
, wellthie_issuer_identifier
и hios_issuer_identifier
.
С этими 3 столбцами мне нужно выполнить запрос выбора, что-то вроде,
select id from table_name where carrier_plan_identifier = 'something' and wellthie_issuer_identifier = 'something' and hios_issuer_identifier = 'something'
Мне нужно добавить id
колонка обратно к моему существующему фрейму данных
В настоящее время я делаю что-то вроде этого,
for index, frame in df_with_servicearea.iterrows():
if frame['service_area_id'] and frame['issuer_id']:
# reading from medical plans table
medical_plan_id = getmodeldata.get_medicalplans(sess, frame['issuer_id'], frame['hios_plan_identifier'], frame['plan_year'],
frame['group_or_individual_plan_type'])
frame['medical_plan_id'] = medical_plan_id
df_with_servicearea.append(frame)
, когда я делаю это, frame['medical_plan_id'] = medical_plan_id
, ничего не добавляется.Но когда я делаю df_with_servicearea['medical_plan_id'] = medical_plan_id
, ко всем строкам добавляется только последнее значение цикла.Я не уверен, что это правильный способ сделать это.
Обновление -:
После использования я получаю 4 строки вместо 2 строк, которые должны быть там.
df_with_servicearea = df_with_servicearea.append(frame)
wellthie_issuer_identifier ... medical_plan_id
0 UHC99806 ... NaN
1 UHC99806 ... NaN
0 UHC99806 ... 879519.0
1 UHC99806 ... 879520.0
Обновление 2 - Реализовано на основе ответа Mayank - Привет, Mayank, Вы предлагаете что-то подобное.
для индекса, кадр в df_with_servicearea.iterrows ():
if frame['service_area_id'] and frame['issuer_id']:
# reading from medical plans table
df_new = getmodeldata.get_medicalplans(sess, frame['issuer_id'], frame['hios_plan_identifier'], frame['plan_year'],
frame['group_or_individual_plan_type'])
df_new.columns = ['medical_plan_id', 'issuer_id', 'hios_plan_identifier', 'plan_year',
'group_or_individual_plan_type']
new_df = pd.merge(df_with_servicearea, df_new, on=['issuer_id', 'hios_plan_identifier', 'plan_year', 'group_or_individual_plan_type'], how='left')
print new_df
моя функция get_medicalplans, где я вызываю запрос на выборку.
def get_medicalplans(self,sess, issuerid, hios_plan_identifier, plan_year, group_or_individual_plan_type):
try:
medical_plan = sess.query(MedicalPlan.id, MedicalPlan.issuer_id, MedicalPlan.hios_plan_identifier,
MedicalPlan.plan_year, MedicalPlan.group_or_individual_plan_type).filter(MedicalPlan.issuer_id == issuerid,
MedicalPlan.hios_plan_identifier == hios_plan_identifier,
MedicalPlan.plan_year == plan_year,
MedicalPlan.group_or_individual_plan_type == group_or_individual_plan_type)
sess.commit()
return pd.read_sql(medical_plan.statement, medical_plan.session.bind)