我有三个数据帧df1,df2和df3,它们的定义如下
df1 =
A B C
0 1 a a1
1 2 b b2
2 3 c c3
3 4 d d4
4 5 e e5
5 6 f f6
df2 =
A B C
0 1 a X
1 2 b Y
2 3 c Z
df3 =
A B C
3 4 d P
4 5 e Q
5 6 f R
我已经定义了主键列表PK = ["A","B"]
。
现在,我将第四个数据帧df4作为df4 = df1.sample(n=2)
,给出类似
df4 =
A B C
4 5 e e5
1 2 b b2
现在,我想从df2和df1中选择与df4主键值匹配的行。例如,在这种情况下,我需要从df3获得index = 4的行,从df2获得index = 1的行。
如果可能,我需要获取一个数据框,如下所示:
df =
A B C A(df2) B(df2) C(df2) A(df3) B(df3) C(df3)
4 5 e e5 5 e Q
1 2 b b2 2 b Y
关于如何解决此问题的任何想法将非常有帮助。
这是我将对整个数据集执行的操作。如果您想先采样,只需在末尾更新合并语句,就可以替换df1
为df4
或仅采样以下内容t
PK = ["A","B"]
df2 = pd.concat([df2,df2], axis=1)
df2.columns=['A','B','C','A(df2)', 'B(df2)', 'C(df2)']
df2.drop(columns=['C'], inplace=True)
df3 = pd.concat([df3,df3], axis=1)
df3.columns=['A','B','C','A(df3)', 'B(df3)', 'C(df3)']
df3.drop(columns=['C'], inplace=True)
t = df1.merge(df2, on=PK, how='left')
t = t.merge(df3, on=PK, how='left')
输出量
A B C A(df2) B(df2) C(df2) A(df3) B(df3) C(df3)
0 1 a a1 1.0 a X NaN NaN NaN
1 2 b b2 2.0 b Y NaN NaN NaN
2 3 c c3 3.0 c Z NaN NaN NaN
3 4 d d4 NaN NaN NaN 4.0 d P
4 5 e e5 NaN NaN NaN 5.0 e Q
5 6 f f6 NaN NaN NaN 6.0 f R
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句