Python 用一个键合并两个数据帧,其中一列变为行,另一列不变为行';T

Python 用一个键合并两个数据帧,其中一列变为行,另一列不变为行';T,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧df1,如下所示: A B key a1 b1 001A a2 b2 4906 a3 b3 0190 a4 b4 1993 和另一个数据帧df2,如: C D key c1 1 001A c1 2 4906 c1 3 0190 c1 4 1993 c2 5 001A c2 6 4906 c2 7 0190 c2 8 1993 我想合并它们以获得 A B key c1 c2 a1 b1 001

我有一个数据帧
df1
,如下所示:

A   B   key
a1  b1  001A
a2  b2  4906
a3  b3  0190
a4  b4  1993
和另一个数据帧df2,如:

C   D   key
c1  1  001A
c1  2  4906
c1  3  0190
c1  4  1993
c2  5  001A
c2  6  4906
c2  7  0190
c2  8  1993
我想合并它们以获得

A   B   key    c1   c2 
a1  b1  001A    1    5
a2  b2  4906    2    6
a3  b3  0190    3    7
a4  b4  1993    4    8
我试过了

pd.merge(df, df2, on='key')
但它不像我想要的那样匹配。我似乎无法将行作为列

您应该首先使用
df2
将其做成您想要的形状

df2.pivot(index='key', columns='C', values='D')
c1c2
钥匙
001A 1 5
0190   3   7
1993   4   8
4906   2   6
然后,您可以将此透视表连接到您的
df

df.join(df2.pivot(index='key', columns='C', values='D'), on='key')
A B键c1 c2
0 a1 b1 001A 1 5
1 a2 b2 4906 2 6
2 a3 b3 0190 3 7
3 a4 b4 1993 4 8
或者,如果您愿意,可以使用
pd.merge
,尽管它更详细

pd.merge(df, df2.pivot(index='key', columns='C', values='D'),
         left_on='key', right_index=True)
您应该首先使用
df2
将其设置为所需的形状

df2.pivot(index='key', columns='C', values='D')
c1c2
钥匙
001A 1 5
0190   3   7
1993   4   8
4906   2   6
然后,您可以将此透视表连接到您的
df

df.join(df2.pivot(index='key', columns='C', values='D'), on='key')
A B键c1 c2
0 a1 b1 001A 1 5
1 a2 b2 4906 2 6
2 a3 b3 0190 3 7
3 a4 b4 1993 4 8
或者,如果您愿意,可以使用
pd.merge
,尽管它更详细

pd.merge(df, df2.pivot(index='key', columns='C', values='D'),
         left_on='key', right_index=True)

完美的从来没有想过枢轴部分!完美的从来没有想过枢轴部分!