2016-07-14 95 views
2

我想执行一个特定的连接操作用下列要求:大熊猫复杂联接操作

我有以下列格式,其中,所述索引是日期时间的数据帧和我具有从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 
+0

所以,莫不是一些最新指标在DF2可能是DF1的一部分,或者反之亦然失踪?如果是这样,那么期望的行为是什么?你能为这种情况发布一个样本案例吗? – Divakar

回答

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 
+0

我会认为这会更快,因为它避免了对数组的任何转换。很高兴看到NumPy替代熊猫做这样的花式索引。 – Divakar

3

沿着这些东西线取自NumPy的索引方法 -

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

它的工作!谢谢 – motam79

+0

@ motam79也请关注@ jezrael的解决方案,因为这可能会更快。 – Divakar