2016-07-14 94 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