在 Python 3.x 中将基于特定列的列和值的两个 DataFrame 与 Pandas 合并
Posted
技术标签:
【中文标题】在 Python 3.x 中将基于特定列的列和值的两个 DataFrame 与 Pandas 合并【英文标题】:Merge two DataFrames based on columns and values of a specific column with Pandas in Python 3.x 【发布时间】:2019-04-12 09:13:18 【问题描述】:您好,我有一个问题,我无法实施解决方案。 我有以下两个数据框:
>>> df1
A B date
1 1 01-2016
2 1 02-2017
1 2 03-2017
2 2 04-2020
>>> df2
A B 01-2016 02-2017 03-2017 04.2020
1 1 0.10 0.22 0.55 0.77
2 1 0.20 0.12 0.99 0.125
1 2 0.13 0.15 0.15 0.245
2 2 0.33 0.1 0.888 0.64
我想要的是关注 DataFrame:
>>> df3
A B date value
1 1 01-2016 0.10
2 1 02-2017 0.12
1 2 03-2017 0.15
2 2 04-2020 0.64
我已经尝试过:
summarize_dates = self.summarize_specific_column(data=df1, column='date')
for date in summarize_dates:
left_on = np.append(left_on, date)
right_on = np.append(right_on, merge_columns.upper())
result = pd.merge(left=df2, right=df1,
left_on=left_on, right_on=right_on,
how='right')
print(result)
这不起作用。你能帮助我并建议一个更舒适的实施吗?非常感谢您!
【问题讨论】:
最简单的方法是融化 df2,然后在 df1 上进行左连接。 感谢您的回答。但是你说的“融化框架”是什么意思?编辑:已经回答。 :) 【参考方案1】:你可以融化 df2,然后使用默认的 'inner' 合并进行合并
df3 = df1.merge(df2.melt(id_vars = ['A', 'B'], var_name='date'))
A B date value
0 1 1 01-2016 0.10
1 2 1 02-2017 0.12
2 1 2 03-2017 0.15
3 2 2 04-2020 0.64
【讨论】:
谢谢你,我会试试看! 工作正常!非常感谢! @MichaelGann,别忘了accept你认为最合适的答案。【参考方案2】:使用lookup
df1['value']=df2.set_index(['A','B']).lookup(df1.set_index(['A','B']).index,df1.date)
df1
Out[228]:
A B date value
0 1 1 01-2016 0.10
1 2 1 02-2017 0.12
2 1 2 03-2017 0.15
3 2 2 04-2020 0.64
【讨论】:
工作正常!非常感谢!以上是关于在 Python 3.x 中将基于特定列的列和值的两个 DataFrame 与 Pandas 合并的主要内容,如果未能解决你的问题,请参考以下文章