объединение двух панелей данных, где создается новый столбец - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть два фрейма данных Python: один df, который содержит информацию о сайтах, где проводился опрос:

sites = pd.DataFrame(np.array([['A1', 2, 3], ['B3', 5, 6], ['B5', 8, 9]]),
                 columns=['Site_ID', 'SomeVal1', 'SomeVal2'])
sites.set_index('Site_ID')

Второе значение df с лабораторными анализами для каждого участка, где отдельный участок может иметь разные анализы, связанные с глубиной отбора проб (указывается в поле «Тип глубины»

LabData = pd.DataFrame(np.array([['A1_a_s','A1', 'S', 300], ['A1_a_g','A1', 'G', 600], ['B3_b_s','B3', 'S', 900],['B3_b_s','B3', 'G', 90],['B5_b_g','B5', 'G', 390],['B5_b_s','B5', 'S', 550]]),
                   columns=['Chem_ID', 'Site_ID', 'Depth_type', 'Val'])


LabData.set_index('Chem_ID')

Я хотел бы назначить два столбца для сайтов df с labdata для двух типов глубины (которые последовательно кодируются), чтобы получить результат, который выглядит следующим образом:

Site_With_data = pd.DataFrame(np.array([['A1', 2, 3,300,600], ['B3', 5, 6,900,90], ['B5', 8, 9,550,550]]),
                     columns=['Site_ID', 'SomeVal1', 'SomeVal2','Val_depth_type=S','Val_depth_type=G'])

Я пробовал разные способы df.merge, но не получил правильный тип слияния. Ценю любые идеи. Благодарю.

1 Ответ

0 голосов
/ 12 апреля 2019

Используйте DataFrame.pivot с DataFrame.add_prefix для изменения формы и DataFrame.join до sites DataFrame:

df1 = LabData.pivot('Site_ID', 'Depth_type','Val').add_prefix('Val_depth_type=')
df = sites.join(df1, on='Site_ID').reset_index()
print (df)
  Site_ID SomeVal1 SomeVal2 Val_depth_type=G Val_depth_type=S
0      A1        2        3              600              300
1      B3        5        6               90              900
2      B5        8        9              390              550

РЕДАКТИРОВАТЬ: Если дубликаты, используйте DataFrame.pivot_table с агрегатной функцией:

df1 = LabData.pivot_table(index='Site_ID', 
                          columns='Depth_type',
                          values='Val',
                          aggfunc='mean').add_prefix('Val_depth_type=')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...