Python ';pd.concat([df1,df2],join=';outer';)'';df1.先组合(df2)和#x27';pd.合并(df1、df2)和#x27;和';df1.join(df2,how=';outer';)';?
假设我有以下两个数据帧:Python ';pd.concat([df1,df2],join=';outer';)'';df1.先组合(df2)和#x27';pd.合并(df1、df2)和#x27;和';df1.join(df2,how=';outer';)';?,python,pandas,dataframe,join,concatenation,Python,Pandas,Dataframe,Join,Concatenation,假设我有以下两个数据帧: import pandas as pd A = [174,-155,-931,301] B = [943,847,510,16] C = [325,914,501,884] D = [-956,318,319,-83] E = [767,814,43,-116] F = [110,-784,-726,37] G = [-41,964,-67,-207] H = [-555,787,764,-788] df1 = pd.DataFrame({"A": A, "B":
import pandas as pd
A = [174,-155,-931,301]
B = [943,847,510,16]
C = [325,914,501,884]
D = [-956,318,319,-83]
E = [767,814,43,-116]
F = [110,-784,-726,37]
G = [-41,964,-67,-207]
H = [-555,787,764,-788]
df1 = pd.DataFrame({"A": A, "B": B, "C": C, "D": D})
df2 = pd.DataFrame({"E": E, "B": F, "C": G, "D": H})
如果使用join=outer
执行concat
,则会得到以下结果数据帧:
pd.concat([data1,data2], join='outer')
如果我执行df1.combines_first(df2)
,我会得到以下结果:
df1.set_index('B').combine_first(df2.set_index('B')).reset_index()
df1.join(df2, how='outer', on='B', lsuffix='_left', rsuffix='_right')
如果我做了pd.merge(df1,df2)
,我得到的结果与concat产生的结果相同:
pd.merge(data1, data2, on=['B','C','D'], how='outer')
最后,如果我执行df1.join(df2,how='outer')
,我会得到以下结果:
df1.set_index('B').combine_first(df2.set_index('B')).reset_index()
df1.join(df2, how='outer', on='B', lsuffix='_left', rsuffix='_right')
我不完全理解每种方法如何以及为什么会产生不同的结果。:沿着给定的轴将一个数据帧附加到另一个数据帧上(默认的axix=0表示沿着索引合并,即将其他数据帧放在给定的数据帧下)。数据在另一个轴上对齐(即,对于默认设置“对齐列”)。这就是为什么我们在不匹配的列“A”和“E”中得到NaN
:用其他数据帧中的现有值替换数据帧中的NAN,其中行和列被合并(来自两个数据帧的行和列的并集)。在您的示例中,从一开始就没有缺失值,但由于联合操作,它们会出现,因为您的索引没有公共项。行的顺序由排序后的组合索引(df1.B和df2.B)生成。
因此,如果数据帧中没有缺失值,通常不会首先使用combine_
是一种数据库样式,由两个数据帧组合而成,提供了比concat更多的合并选项(左、右、特定列)。在您的示例中,结果的数据是相同的,但concat和merge之间的索引存在差异:在列上合并时,将忽略dataframe索引,并创建一个新索引
合并df1索引上的df1和df2,以及df2的给定列(在示例“B”中)。在您的示例中,这与pd.merge(df1,df2,left_on=df1.index,right_on='B',how='outer',后缀=('u left','u right'))相同。
。由于df1的索引和df2的“B”列之间不匹配,因此由于外部联接,将出现大量的NAN。这是否回答了您的问题@LazyCoder没有完全回答,没有。因为你发布的问题只问了merge
vsconcat
,而我的问题除了merge
vsconcat
之外,还问了join
vscombine\u first
。你问了很多问题。如果你不知道它们是什么,你为什么要问“区别”?——找出它们各自是什么。如果你认为你知道它们是什么,你为什么需要“差异”——这到底是什么意思?无论哪种方式,给出定义,展示并应用研究,并提出一个明确的、具体的、不重复的问题,说明你是如何陷入某一特定点的。请仅将图像用于不能表示为文本或扩充文本的内容。包括带有图像的图例/图例和说明。