在python中连接两个数据帧中的选定列
我试图用python将数据框中的一些列连接起来。比如,我有以下数据帧: df1[‘头’、‘体’、‘羽毛1’、‘羽毛2’] df2[‘头’、‘体’、‘羽毛3’、‘羽毛4’] 我想将数据帧合并到: 合并的_df['Head','Body','feat1','feat2','feat3',feat4'] 凭直觉,我做到了:在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',
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')
谢谢。。这篇文章很有帮助。顺便问一下,是什么让你改变答案的?你想要的结果是什么,这是你在帖子中解释的,尽管两者都是正确的。。你的解释很好。我认为基本的熊猫数据帧教程缺少这种类型的合并。荣誉