如何合并仅几列的两个数据框
Posted
技术标签:
【中文标题】如何合并仅几列的两个数据框【英文标题】:How to merge two dataframe for only few columns 【发布时间】:2018-11-16 00:06:04 【问题描述】:有什么方法可以合并两个数据框,但不合并所有列?
我有两个数据框,我想将一列合并到另一个数据框。
我的数据是这样的
In [1]: left = pd.DataFrame('key1':['a','b','c'], 'key2':['1','2','3'], 'v1':['january','january','january'], index=[0,5,8]); left
Out[1]:
key1 key2 v1
0 a 1 january
5 b 2 january
8 c 3 january
In [2]: right = pd.DataFrame('key1':['a','b','c'], 'key2':['1','2','3'], 'v1':['1<0xA4EB>','1<0xA4EB>','1<0xA4EB>'], 'new_value':[23,346,435]); right
Out[2]:
key1 key2 v1 new_value
0 a 1 1<0xA4EB> 23
1 b 2 1<0xA4EB> 346
2 c 3 1<0xA4EB> 435
In [3]: pd.merge(left, right[['key1', 'key2', 'new_value']], on=['key1', 'key2'])
Out[3]:
key1 key2 v1 new_value
0 a 1 january 23
1 b 2 january 346
2 c 3 january 435
我选择关键列和新列,然后将它们合并。
但我认为这种方式并不聪明。我想找到更简单的方法,如果有人知道,请告诉我。
提前致谢。
【问题讨论】:
我认为这是聪明的方式:) 【参考方案1】:在这种情况下,您似乎只是想向其中一个数据框添加一个新列。如果是这种情况,为什么不将您想要的列附加到数据框 1,并将日期框 2 的索引设置为等于数据框 1 的索引,或者创建数据框 2 的副本并重新索引它?这是一个示例,我只是将 df2 中所需的列附加到 df1。 (请注意,为了节省时间,我没有从 df2 完全复制您的代码,但您会明白这个概念):
import pandas as pd
left = pd.DataFrame('key1':['a','b','c'], 'key2':['1','2','3'], 'v1':['january','january', 'january'], index=[0, 5, 8])
right = pd.DataFrame('new_value': [23, 346, 435])
copy = right.index = left.index
left['new_value'] = right['new_value']
print(left)
这是你的输出:
key1 key2 v1 new_value
0 a 1 january 23
5 b 2 january 346
8 c 3 january 435
我觉得您可能希望将其作为一个潜在的选项,以使您的索引远离 df1。您的解决方案有效,但如果您出于某种原因需要按特定顺序排列索引,这只是一种让索引按第一个数据帧顺序排列的方法。
【讨论】:
我认为这是另一种好方法,谢谢。但是当我使用left['new_value'] = right['new_value']
时,它会告诉我这个C:\Users\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
会影响什么吗?
@JoyWang 这似乎只是一个警告,但您的代码仍将运行。我只是使用 ide,所以没有收到相同的警告信息以上是关于如何合并仅几列的两个数据框的主要内容,如果未能解决你的问题,请参考以下文章