繁体   English   中英

从python pandas中的两个数据框中连接选定的列

[英]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分别为df1df2 ,那么,如果列中的值相同或唯一,则只需合并即可将列按需要对齐。

$ 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解决方案:

如果要使用两个框架中的键并集,则可以同时使用concatmerge ,如下所示:

>>> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM