假设我有多个Pandas数据帧,每个数据帧都有多行和多列,其中第一个包含某事物的ID。我想做的非常简单,就是我使用合并,联接,concat等失败了...如果df1和df2的第一列相同,则将第2列附加到df2的末尾到df1,否则跳过它
例如:
dat1={'A':['1', '2', '3'],'B':['4', '7', '11'],
'C':['5', '8', '12'],'D':['6', '9', '13']}
df1 = pd.DataFrame.from_dict(dat1, orient='index')
dat2={'A':['1', '2', '3'],'B':['4', '7', '11'],
'C':['5', '8', '12'],'D':['6', '9', '13']}
df2 = pd.DataFrame.from_dict(dat2, orient='index')
在这种情况下,由于两者的第一列都包含A,B,C和D,因此合并的数据帧将具有4行,共6列。
df_merged
0 1 2 3 4 5
A 1 2 3 1 2 3
B 4 7 11 4 7 11
C 5 8 12 5 8 12
D 6 9 13 6 9 13
如果在第二个数据帧中有一个E而不是B,那么我根本不会合并它们。
答案 0 :(得分:0)
使用合并
pd.merge(df1,df2,left_index=True,right_index=True)
0_x 1_x 2_x 0_y 1_y 2_y
A 1 2 3 1 2 3
B 4 7 11 4 7 11
C 5 8 12 5 8 12
D 6 9 13 6 9 13
def myFunc(df1,df2):
if len(np.intersect1d(df1.index.values, df2.index.values)) == len(df1.index.values) & len(np.intersect1d(df1.index.values, df2.index.values)) == len(df2.index.values):
df = pd.merge(df1,df2,left_index=True,right_index=True)
return df
else:
pass
答案 1 :(得分:0)
使用pd.concat,将多个DataFrame粘合在一起,然后在所需的轴上合并,方法是从pandas Doc
>>> frames = [df1, df2]
>>> pd.concat(frames, axis=1)
0 1 2 0 1 2
A 1 2 3 1 2 3
B 4 7 11 4 7 11
C 5 8 12 5 8 12
D 6 9 13 6 9 13