Join 熊猫中索引和键的连接
我不确定我是否正确使用了这些术语,因为我对pandas和python非常陌生。然而,我有两个数据帧,我想加入其中。它们可以在索引列和其他键列(示例)上匹配“样本”范围为001至100,每个样本的指数范围为1至729 df1 df2 结果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
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']