[英]Concatenating selected columns from two data frames in python pandas
我试图将python熊猫的数据框中的某些列连接起来。 说,我有以下数据帧:
df1 ['Head','Body','feat1','feat2']
df2 ['Head','Body','feat3','feat4']
我想将数据框合并到:
merged_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')
它有效,但是导致我的数据存在一些差异。 原来我的一些“头”数据不是唯一的。 因此,现在我正在寻找最直接的方法来将DF2中的选定列连接到我的DF1中。 请注意,两个数据帧遵循相同的顺序,因此DF1中的行1与DF2中的行1直接相关,第8120行也是如此。
谢谢
我认为您需要赋值,它将忽略索引
df1['feat3']=df2['feat3'].values
df1['feat4']=df2['feat4'].values
以一个示例为例,假设我们有两个DataFrame分别为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
步骤1解决方案:
>>> 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
步骤2解决方案:
如果要使用两个框架中的键并集,则可以同时使用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内部联接; 保留左键的顺序
您可以看到DataFrame.merge以了解详细信息。
查看解决方法后,您想使用left frame
的键
>>> 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.