2017-10-18 72 views
0

我有两个数据帧:追加值大熊猫其中值等于其它值

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 

我创建的副本作为DF执行以下操作:

df = dfi.copy(deep=True) 

返回DFI的精确副本, 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的我能做些什么,因此追加其中date等于DATE2仅的日期? 谢谢!

+0

呃,这些日期是不相等的,虽然,你怎么还在组合行? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ这些只是前4个日期,整个数据集是14000个条目,这就是为什么它找到该日期== 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