pandas复杂的连接操作

时间:2016-07-14 17:57:23

标签: python pandas join merge

我想实现具有以下要求的特定连接操作:

我有一个以下格式的数据框,其中索引是datetime,我有0到N的列(本例中为9)

DF1:

             0   1   2   3   4   5   6   7   8   9
2001-01-01   2  53  35  91  43  31   7  87  25  68
2001-01-02  12  97  86  59  51   7  75  25   6  40
2001-01-03  73  82  87   1  46  66  17  42  96  61

我还有另一个数据框,其中包含为每个日期时间索引选择的列,即值为0到N:

            0
2001-01-01  9
2001-01-02  5
2001-01-03  4

我想选择第一个数据帧的基础值,其中

index df1 = index df2
columns df1 = value df2

例如,上述示例的结果应如下所示:

join(df1,df2)=
            0
2001-01-01  68
2001-01-02  7
2001-01-03  46

2 个答案:

答案 0 :(得分:3)

从NumPy的索引方法中获取的一些东西 -

vals = df1.values[np.arange(df1.shape[0]),df2[0].values]
df_out = pd.DataFrame(vals,index=df1.index)

答案 1 :(得分:3)

您可以使用lookup

print (df1.lookup(df1.index, df2.iloc[:,0]))
[68  7 46]

print (pd.DataFrame(df1.lookup(df1.index, df2.iloc[:,0]), index=df1.index))
             0
2001-01-01  68
2001-01-02   7
2001-01-03  46

squeeze的另一种解决方案:

print (pd.DataFrame(df1.lookup(df1.index, df2.squeeze()), index=df1.index))
             0
2001-01-01  68
2001-01-02   7
2001-01-03  46