Python 通过比较不同数据帧中的其他两列来连接列
我有两个大小不同的数据帧: df1:Python 通过比较不同数据帧中的其他两列来连接列,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个大小不同的数据帧: df1: id日期时间 0 a1 1/1/2015 1 a1 2015年1月2日 2 a1 2015年1月3日 3 a2 2015年1月1日 4 a2 2/1/2015 5 a3 2/1/2015 6 a3 3/1/2015 df2: 我想比较df1和df2,这样我就可以用相应id和datetime的总成本值更新df1。因此,我希望我的结果如下所示: df1: 我尝试使用isin,但无法同时比较id和日期时间列。除了for循环和逐行比较之外,还有什么优雅的方法可以做
id日期时间
0 a1 1/1/2015
1 a1 2015年1月2日
2 a1 2015年1月3日
3 a2 2015年1月1日
4 a2 2/1/2015
5 a3 2/1/2015
6 a3 3/1/2015
df2:
我想比较df1和df2,这样我就可以用相应id和datetime的总成本值更新df1。因此,我希望我的结果如下所示:
df1:
我尝试使用isin,但无法同时比较id和日期时间列。除了for循环和逐行比较之外,还有什么优雅的方法可以做到这一点吗?提前感谢您可以在两个键上进行简单的
合并
:
res = pd.merge(df1, df2, on=['id', 'datetime'])
print(res)
id datetime total
0 a1 1/1/2015 3.0
1 a1 2/1/2015 4.0
2 a1 3/1/2015 2.5
3 a2 1/1/2015 5.0
4 a2 2/1/2015 4.0
5 a3 2/1/2015 8.0
6 a3 3/1/2015 4.0
您可以在两个键上执行简单的
合并:
res = pd.merge(df1, df2, on=['id', 'datetime'])
print(res)
id datetime total
0 a1 1/1/2015 3.0
1 a1 2/1/2015 4.0
2 a1 3/1/2015 2.5
3 a2 1/1/2015 5.0
4 a2 2/1/2015 4.0
5 a3 2/1/2015 8.0
6 a3 3/1/2015 4.0
谢谢你的解决方案。我已经发布了这些df作为示例,但我的真实数据集有更多的列,我只需要合并其中一个。我们可以指定需要合并的一个吗?一个技巧是通过获取数据帧的子集只合并列。例如,您需要的列是x
和y
。您可以这样做:pd.merge(df1,df2[['id','datetime','x','y']],on=['id','datetime'])
EDIT:忘记添加键谢谢您的解决方案。我已经发布了这些df作为示例,但我的真实数据集有更多的列,我只需要合并其中一个。我们可以指定需要合并的一个吗?一个技巧是通过获取数据帧的子集只合并列。例如,您需要的列是x
和y
。您可以这样做:pd.merge(df1,df2[['id','datetime','x','y']],on=['id','datetime'])
EDIT:忘记添加键
res = pd.merge(df1, df2, on=['id', 'datetime'])
print(res)
id datetime total
0 a1 1/1/2015 3.0
1 a1 2/1/2015 4.0
2 a1 3/1/2015 2.5
3 a2 1/1/2015 5.0
4 a2 2/1/2015 4.0
5 a3 2/1/2015 8.0
6 a3 3/1/2015 4.0