#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
, поэтому не могли бы вы обновить его тем, что вы хотите, чтобы произошло с двумя фреймами данных? Непонятно, почему вы хотите их выровнять.