gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:26 27 4
gpt4 key购买 nike

我正在尝试在 python pandas 中连接我的数据框中的一些列。比如说,我有以下数据框:

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 行也是如此......

谢谢

最佳答案

举个例子,假设我们有两个 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')

默认为“内部”。

inner: use intersection of keys from both frames, similar to a SQL inner join; preserve the order of the left keys

你可以看到DataFrame.merge详细选项..

查看解决方法后,您想使用左框架中的键

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

关于python - 从python pandas中的两个数据框中连接选定的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54000636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com