Выравнивание фрейма данных не работает в pandas

#pandas

#pandas

Вопрос:

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

 dateparse = lambda x: pd.datetime.strptime(x, '%d.%m.%Y')
#well_dates_up_obj=fhist_grouped_hist_data.reset_index(drop=True).set_index(['well_alias','Дата','upper_obj'], drop=False)
well_dates_up_obj=fhist_grouped_hist_data.copy(deep=True)

presdf = reading_csv_files(files_dict, 'davl','cp1251', sep=';' , skipinitialspace=True, header = 0,parse_dates = ['DAT'], date_parser=dateparse)
presdf['well_alias'] = presdf.apply(lambda x: renamefunc(x['NSKV'].upper()), axis = 1);
presdf = presdf.loc[presdf['well_alias'].isin(wells_im_model),:]
presdf.replace({'PPL':0, 'PZAB':0},np.nan, inplace=True)
presdf['area'] = ''
for wellname in set(presdf['well_alias']):
    presdf.loc[presdf['well_alias']==wellname,'area'] = wells[wellname].area
presdf=presdf.rename({'GOR':'davlname'},axis='columns')
presdf = presdf.set_index(['area','davlname'], drop=False)
objectsdavl_indxed = objectsdavl.set_index(['area','davlname'], drop=False)
presdf = presdf.reindex(columns = np.append( presdf.columns.values, ['woc', 'liqden', 'obj_alias'])) 
  

presdf.loc[:,[‘woc’, ‘liqden’, ‘obj_alias’]] = objectsdavl_indxed[[‘woc’, ‘den’, ‘alias’]].align(presdf, join=’right’, axis=0)[0].to_numpy()

И я получаю неправильно выровненный фрейм данных с разными индексами.

Следующий код является примером фреймов данных:

 presdf[['woc', 'liqden', 'obj_alias']].head()
Out[127]: 
                                woc  liqden obj_alias
area                        davlname                         
AREA1                       C1    980.0    0.92  C2
                            C1    980.0    0.92  C2
                            C1    980.0    0.92  C2
                            C1    980.0    0.92  C2
                            C1    980.0    0.92  C2


objectsdavl_indxed[['woc', 'den', 'alias']].align(presdf, join='right', axis=0)[0].head()
Out[128]: 
                        woc   den     alias
area                 davlname                       
AREA2                C2  980.0  0.92 C2
                     C2  980.0  0.92 C2
                     C2  980.0  0.92 C2
                     C2  980.0  0.92 C2
                     C2  980.0  0.92 C2
  

Но я хочу последующий результат:

 objectsdavl_indxed[['woc', 'den', 'alias']].align(presdf, join='right', axis=0)[0].head()
Out[128]: 
                                woc  liqden obj_alias
area                        davlname                         
AREA1                       C1    980.0    0.92  C2
                            C1    980.0    0.92  C2
                            C1    980.0    0.92  C2
                            C1    980.0    0.92  C2
                            C1    980.0    0.92  C2
  

Комментарии:

1. выравнивание выровняет индексы, оно не объединяет столбцы. objectsdavl_indxed в нем нет нужных столбцов. Попробуйте использовать pd.concat([presdf, objectsdavl_indxed], axis=1) для фактического объединения столбцов. Это неявно выровняет индекс фреймов данных

2. Я хочу выровнять два фрейма данных по индексу, а не по столбцу. Из-за этого я использовал метод align. Оба фрейма данных имеют похожие столбцы, @Ken Syme

3. Можете ли вы показать начало objectsdavl_indxed ? Ваш желаемый результат содержит столбцы из presdf , поэтому не могли бы вы обновить его тем, что вы хотите, чтобы произошло с двумя фреймами данных? Непонятно, почему вы хотите их выровнять.