在python中连接两个数据帧中的选定列

在python中连接两个数据帧中的选定列,python,pandas,dataframe,Python,Pandas,Dataframe,我试图用python将数据框中的一些列连接起来。比如,我有以下数据帧: df1[‘头’、‘体’、‘羽毛1’、‘羽毛2’] df2[‘头’、‘体’、‘羽毛3’、‘羽毛4’] 我想将数据帧合并到: 合并的_df['Head','Body','feat1','feat2','feat3',feat4'] 凭直觉,我做到了: merged_df = pd.concat([df1, df2['feat3','feat4'],axis=1) merged_df = df1[['Head','Body',

我试图用python将数据框中的一些列连接起来。比如,我有以下数据帧:

df1[‘头’、‘体’、‘羽毛1’、‘羽毛2’]

df2[‘头’、‘体’、‘羽毛3’、‘羽毛4’]

我想将数据帧合并到:

合并的_df['Head','Body','feat1','feat2','feat3',feat4']

凭直觉,我做到了:

merged_df = pd.concat([df1, df2['feat3','feat4'],axis=1)
merged_df = 
df1[['Head','Body','feat1','feat2']].merge(df2[['Head','feat3','feat4']], 
on='Head', how='left')
它不起作用。我做了我的研究并做了以下工作:

merged_df = pd.concat([df1, df2['feat3','feat4'],axis=1)
merged_df = 
df1[['Head','Body','feat1','feat2']].merge(df2[['Head','feat3','feat4']], 
on='Head', how='left')
它起作用了,但对我的数据造成了一些差异。我的一些“头部”数据不是唯一的。因此,现在我正在寻找最直接的方法,将DF2中选定的列连接到我的DF1中。请注意,两个数据帧的顺序相同,因此DF1中的行1与DF2中的行1直接相关,第8120行也是如此,依此类推


谢谢

我想你需要赋值,它会忽略索引

df1['feat3']=df2['feat3'].values
df1['feat4']=df2['feat4'].values

举个例子,假设我们有两个数据帧,分别为
df1
df2
,因此,如果列的值相同或唯一,那么您可以简单地进行合并,这将根据需要对齐列

$ df1
   Head  Body  feat1  feat2
0     1     1      1      1
1     2     2      2      2
2     3     3      3      3


$ df2
   Head  Body  feat3  feat4
0     1     1      1      1
1     2     2      2      2
2     3     3      3      3
第一步解决方案:

>>> pd.merge(df1, df2, on=['Head',  'Body'])
   Head  Body  feat1  feat2  feat3  feat4
0     1     1      1      1      1      1
1     2     2      2      2      2      2
2     3     3      3      3      3      3
其次,如果列值不同,则可以使用pd.concat或pd.merge:

$ df1
   Head  Body  feat1  feat2
0     1     1      1      1
1     2     2      2      2
2     3     3      3      3

$ df2
   Head  Body  feat3  feat4
0     4     1      1      1
1     5     2      2      2
2     6     3      3      3
第二步解决方案:

>>> pd.merge(df1, df2, on=['Head',  'Body'])
   Head  Body  feat1  feat2  feat3  feat4
0     1     1      1      1      1      1
1     2     2      2      2      2      2
2     3     3      3      3      3      3
如果要使用两个帧中的关键帧的并集,则可以使用
concat
merge
进行并集,如下所示:

>>> pd.concat([df1,df2], join="outer", sort=False)
   Head  Body  feat1  feat2  feat3  feat4
0     1     1    1.0    1.0    NaN    NaN
1     2     2    2.0    2.0    NaN    NaN
2     3     3    3.0    3.0    NaN    NaN
0     4     1    NaN    NaN    1.0    1.0
1     5     2    NaN    NaN    2.0    2.0
2     6     3    NaN    NaN    3.0    3.0


>>> pd.merge(df1, df2, on=['Head',  'Body'], how='outer')
   Head  Body  feat1  feat2  feat3  feat4
0     1     1    1.0    1.0    NaN    NaN
1     2     2    2.0    2.0    NaN    NaN
2     3     3    3.0    3.0    NaN    NaN
3     4     1    NaN    NaN    1.0    1.0
4     5     2    NaN    NaN    2.0    2.0
5     6     3    NaN    NaN    3.0    3.0
或者您可以选择:

a) 如果要使用左帧中的关键点

pd.merge(df1, df2, on=['Head',  'Body'], how='left')
b) 如果要使用右帧中的关键点

pd.merge(df1, df2, on=['Head',  'Body'], how='right')
默认值为“内部”

内部:使用两个帧的关键点的交点,类似于SQL 内连接;保留左键的顺序

您可以查看详细信息选项

查看解决方法后,您希望使用
左框中的关键点

>>> pd.merge(df1, df2, on=['Head',  'Body'], how='left')
   Head  Body  feat1  feat2  feat3  feat4
0     1     1      1      1    NaN    NaN
1     2     2      2      2    NaN    NaN
2     3     3      3      3    NaN    NaN

你能创建一个小数据集和预期的输出吗?
df1.merge(df2,on=['Head','Body'],how='left')
谢谢。。这篇文章很有帮助。顺便问一下,是什么让你改变答案的?你想要的结果是什么,这是你在帖子中解释的,尽管两者都是正确的。。你的解释很好。我认为基本的熊猫数据帧教程缺少这种类型的合并。荣誉