使用元组索引连接数据帧

时间:2017-07-28 23:57:02

标签: python python-2.7 pandas dataframe

我有一组数据框,我想连接它们:

1            1,1
    (0, 0)  111
    (0, 1)  256
    (1, 0)  252
    (1, 1)  381


2            1,3
    (0, 0)   50
    (0, 1)   85
    (0, 2)  119
    (0, 3)  191
    (1, 0)   88
    (1, 1)  111
    (1, 2)  157
    (1, 3)  199


3            1,4
    (0, 0)   21
    (0, 1)   56
    (0, 2)   88
    (0, 3)  130
    (0, 4)  136
    (1, 0)   67
    (1, 1)   81
    (1, 2)  121
    (1, 3)  138
    (1, 4)  162

结果应该是这样的:

       1,1  1,4  1.3
(0, 0) 111  21   50
(0, 1) 256  56   85
(0, 2) NaN  88   119
(0, 3) NaN 130   191
(0, 4) NaN 136   NaN
(1, 0) 252  67   88
(1, 1) 381  81   111
(1, 2) NaN 121   157
(1, 3) NaN 138   199
(1, 4) NaN 162   NaN

我用它来连接集合:

df = pd.concat(s_ds)

轴= 1但是我得到一个结果,每个元素都用键分隔。可以帮我找到一种方法来合并存储在s_ds中的数据集合而不用密钥吗?

1 个答案:

答案 0 :(得分:1)

您可以使用df.join的外部联接(如果您有2-3个数据框,则仍然可以):

In [262]: df.join(df2, how='outer').join(df3, how='outer')
Out[262]: 
          1,1    1,3  1,4
(0, 0)  111.0   50.0   21
(0, 1)  256.0   85.0   56
(0, 2)    NaN  119.0   88
(0, 3)    NaN  191.0  130
(0, 4)    NaN    NaN  136
(1, 0)  252.0   88.0   67
(1, 1)  381.0  111.0   81
(1, 2)    NaN  157.0  121
(1, 3)    NaN  199.0  138
(1, 4)    NaN    NaN  162

此处,dfdf2df3是您的三个数据框。

替代使用pd.concat(对于多个数据框更好,就像您的情况一样):

In [278]: df = pd.concat([df, df2, df3], axis=1)

In [279]: df.index = df.index.to_series()

In [280]: df
Out[280]: 
          1,1    1,3  1,4
(0, 0)  111.0   50.0   21
(0, 1)  256.0   85.0   56
(0, 2)    NaN  119.0   88
(0, 3)    NaN  191.0  130
(0, 4)    NaN    NaN  136
(1, 0)  252.0   88.0   67
(1, 1)  381.0  111.0   81
(1, 2)    NaN  157.0  121
(1, 3)    NaN  199.0  138
(1, 4)    NaN    NaN  162