2016-10-09 3 views
1

I最初のデータフレームdf1があります。ここでcol_b H1とH24の間の任意の数であり、各対応する日付の1〜24の全てが含まれていません:パンダのデータフレームの2つの行を使用して、別のデータフレーム内の場所を選択してください。

Date  col_b 
20101101 h1 
20101101 h2 
20101101 h3 
20101102 h1 
20101102 h3 
20101103 h2 
20101104 h1 
20101105 h2 
20101105 h3 
20101106 h6 
20101106 h8 
20101106 h24 
20101107 h15 

そして第二にデータフレームdf2として:私はから値を選択する必要が

date  h1 h2 h3 h4 h5 h6 ... h24 
20101101 4 6 45 6 7 8 ... 5 
20101102 ......................... 
20101103 ......................... 

df2からdf1の行がdf2の場所に一致するリストに移動します。

現在、Iはdf1で行ごと df2.loc[df2['Date] ==row[0], row[1]]としてdf2の行df1の値と代入値を選択するiterrowsを使用しています。

これは多忙で時間がかかります。それを行うためのピジョンまたはパンダの方法はありますか?

答えて

1

使用DataFrame.lookup()

import numpy as np 
import pandas as pd 

df2 = pd.DataFrame(np.random.randint(0, 10, (5, 3)), 
        columns=list("ABC"), 
        index=pd.date_range("2016/01/01", "2016/05/01", freq="MS")) 

df = pd.DataFrame({"date":df2.index[np.random.randint(0, 5, 10)], 
        "key": df2.columns[np.random.randint(0, 3, 10)]}) 

df["value"] = df2.lookup(df["date"], df["key"]) 
print(df) 

結果:

 date key value 
0 2016-01-01 C  2 
1 2016-05-01 A  8 
2 2016-01-01 A  8 
3 2016-04-01 B  1 
4 2016-04-01 C  2 
5 2016-03-01 A  2 
6 2016-03-01 A  2 
7 2016-04-01 B  1 
8 2016-05-01 A  8 
9 2016-03-01 B  5 
+0

は、迅速な返信いただきありがとうございます。私はインデックスとしてではなく整数列として日付を持っています。これは 'KeyError'(' df'カラムの最初の値) – Jagruth

関連する問題