首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并创建新列的两个pandas数据帧

合并创建新列的两个pandas数据帧
EN

Stack Overflow用户
提问于 2019-04-12 16:14:46
回答 1查看 26关注 0票数 0

我有两个python数据帧:一个df,它包含发生了一些调查的站点的信息:

代码语言:javascript
复制
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包含每个站点的实验室分析,其中单个站点可以有与采样深度相关的不同分析(由字段“深度类型”表示

代码语言:javascript
复制
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为site df分配两列,以生成如下所示的结果:

代码语言:javascript
复制
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方法,但是我没有得到正确的合并类型。感谢你的任何想法。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-04-12 16:27:11

DataFrame.add_prefix使用DataFrame.pivot进行整形,对sites DataFrame使用DataFrame.join

代码语言:javascript
复制
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与聚合函数一起使用:

代码语言:javascript
复制
df1 = LabData.pivot_table(index='Site_ID', 
                          columns='Depth_type',
                          values='Val',
                          aggfunc='mean').add_prefix('Val_depth_type=')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55647248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档