Join 熊猫中索引和键的连接

Join 熊猫中索引和键的连接,join,pandas,concat,Join,Pandas,Concat,我不确定我是否正确使用了这些术语,因为我对pandas和python非常陌生。然而,我有两个数据帧,我想加入其中。它们可以在索引列和其他键列(示例)上匹配“样本”范围为001至100,每个样本的指数范围为1至729 df1 df2 结果 sample x1 x2 x3 x4 q1 q2 q3 q4 q5 q6 id 1 068 41.967 0.34 0.71 0.928

我不确定我是否正确使用了这些术语,因为我对pandas和python非常陌生。然而,我有两个数据帧,我想加入其中。它们可以在索引列和其他键列(示例)上匹配“样本”范围为001至100,每个样本的指数范围为1至729

df1

df2

结果

    sample x1       x2      x3      x4     q1   q2  q3  q4  q5  q6  
id                  
1   068   41.967    0.34    0.71    0.928  a1   a2  r1  r2  c1  c2  
2   068   28.77     0.07    0.81    0.952  a1   a2  r1  r2  c1  c4  
3   068   4.01      0.36    0.70    0.925  a1   a2  r1  r2  c1  c5  
4   068   41.07     0.32    0.70    0.924  a1   a2  r1  r2  c3  c2  
您可以使用
id
sample
列上的2个数据帧。如果希望列为q1、q2,请重命名它们…:

In [33]: pd.merge(df1, df2, on=['id', 'sample'])
Out[33]:
   id  sample      x1    x2    x3     x4  a1  a2  r1  r2  c1  c2
0   1      68  421.67  0.34  0.71  0.928  a1  a2  r1  r2  c1  c2
1   2      68   28.77  0.07  0.81  0.952  a1  a2  r1  r2  c1  c4
2   3      68    4.01  0.36  0.70  0.925  a1  a2  r1  r2  c1  c5
3   4      68   41.07  0.32  0.70  0.924  a1  a2  r1  r2  c3  c2
如果要更改列名,请执行以下操作:

df3 = pd.merge(df1, df2, on=['id', 'sample'])
df3.columns = df3.columns[:-6].tolist() + ['q1', 'q2', 'q3', 'q4', 'q5', 'q6']

In [50]: df3
Out[50]:
   id  sample      x1    x2    x3     x4  q1  q2  q3  q4  q5  q6
0   1      68  421.67  0.34  0.71  0.928  a1  a2  r1  r2  c1  c2
1   2      68   28.77  0.07  0.81  0.952  a1  a2  r1  r2  c1  c4
2   3      68    4.01  0.36  0.70  0.925  a1  a2  r1  r2  c1  c5
3   4      68   41.07  0.32  0.70  0.924  a1  a2  r1  r2  c3  c2
编辑

您可以为列名创建序列(如果有很多列名),如下所示:


如果它们有相同的索引但不同的样本,或者有不同的索引但相同的样本呢?那你想怎么做呢?另外,您的示例将以两个同名列结束。在本例中,值是相同的,但在联接之后,可能会根据联接方式得到不同的值。而且这并不是你想要的:)@Tasos似乎我很乐意地加入了两列和不同的值。我当然希望它是一样的。对于每个样本,有729行对应于该样本的索引(id)。
In [33]: pd.merge(df1, df2, on=['id', 'sample'])
Out[33]:
   id  sample      x1    x2    x3     x4  a1  a2  r1  r2  c1  c2
0   1      68  421.67  0.34  0.71  0.928  a1  a2  r1  r2  c1  c2
1   2      68   28.77  0.07  0.81  0.952  a1  a2  r1  r2  c1  c4
2   3      68    4.01  0.36  0.70  0.925  a1  a2  r1  r2  c1  c5
3   4      68   41.07  0.32  0.70  0.924  a1  a2  r1  r2  c3  c2
df3 = pd.merge(df1, df2, on=['id', 'sample'])
df3.columns = df3.columns[:-6].tolist() + ['q1', 'q2', 'q3', 'q4', 'q5', 'q6']

In [50]: df3
Out[50]:
   id  sample      x1    x2    x3     x4  q1  q2  q3  q4  q5  q6
0   1      68  421.67  0.34  0.71  0.928  a1  a2  r1  r2  c1  c2
1   2      68   28.77  0.07  0.81  0.952  a1  a2  r1  r2  c1  c4
2   3      68    4.01  0.36  0.70  0.925  a1  a2  r1  r2  c1  c5
3   4      68   41.07  0.32  0.70  0.924  a1  a2  r1  r2  c3  c2
In [87]: ['q' + str(num) for num in range(1,7)]
Out[87]: ['q1', 'q2', 'q3', 'q4', 'q5', 'q6']