我有两个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')
我想用两个深度类型(一致编码)的Labdata为站点df分配两列,以生成如下结果:
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的不同方式,但没有获得正确的合并类型。欣赏任何想法。谢谢。
答案 0 :(得分:0)
使用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=')