2017-10-18 3 views
0

私は2つのデータフレームを有する:追加値

dfi = pd.read_csv('C:/Users/Mauricio/Desktop/inflation.csv') 
dfm = pd.read_csv('C:/Users/Mauricio/Desktop/maturity.csv') 
# equals the following 
    observation_date CPIAUCSL 
0  1947-01-01  21.48 
1  1947-02-01  21.62 
2  1947-03-01  22.00 
3  1947-04-01  22.00 
4  1947-05-01  21.95 
    observation_date DGS10 
0  1962-01-02 4.06 
1  1962-01-03 4.03 
2  1962-01-04 3.99 
3  1962-01-05 4.02 
4  1962-01-08 4.03 

Iは、以下を行うDFとしてコピーを作成した:DFIの正確なコピーを返し

df = dfi.copy(deep=True) 

DFI日付がと日付はで行くDFMで行く、私はDFで新しい列を作成したいですそれはdfiの日付== dfmの日付のたびにDGS10の値を追加します。私は今のところこれを持って

for date in df.observation_date: 
    for date2 in dfm.observation_date: 
     if date==date2: 
      df['mat_rate'] = dfm['DGS10'] 

# this is what I get but dates do not match values 
    observation_date CPIAUCSL mat_rate 
0  1947-01-01  21.48  4.06 
1  1947-02-01  21.62  4.03 
2  1947-03-01  22.00  3.99 
3  1947-04-01  22.00  4.02 
4  1947-05-01  21.95  4.03 

それはしかし、作品はそれが日付のみをdate2の等しい値を追加日付== date2の日付私は何を行うことができますを追加しないのですか? ありがとうございました!

+0

ええと、これらの日付は、しかし等しくありませんどのように行を結合しているのですか? –

+0

@cᴏʟᴅsᴘᴇᴇᴅこれらは最初の4つの日付だけです。データセット全体が14000個のエントリであるため、ループ内のある時点でdate == date2が見つかりました。 – MAUCA

答えて

1

日付フォーマットが矛盾している場合は、最初にそれらを変換:

dfi.observation_date = pd.to_datetime(dfi.observation_date, format='%Y-%m-%d') 
dfm.observation_date = pd.to_datetime(dfm.observation_date, format='%Y-%m-%d') 

今、あなたの結果はmergeと簡単なはず取得:

df = dfi.merge(dfm, on='observation_date') 
+0

恐ろしいです! dfm.observation_date = pd.to_datetime(dfm.observation_date、format = '%Y-%d-%m')は次のようにする必要があります。dfm.observation_date = pd.to_datetime(dfm.observation_date 、format = '%Y-%m-%d')誰かがこれを解決策としても使いたい場合には – MAUCA

+0

@MauricioCastaneda 'dfi'と' dfm'の日付形式が違うと思ったのですが?あなたは「dfi」は日から始まり、「dfm」はその月から始まると言いました。それとも同じですか? –

+0

@COLDSPEEDそれらは同じです、つまり、dfiは毎月記録され、dfmは毎日記録されますが、同じ%Y-%m-%dフォーマット – MAUCA