【发布时间】:2017-02-05 16:27:51
【问题描述】:
我有以下 2 个数据框:
day
date val
11740 2016-01-04 1.3970
11741 2016-01-05 1.3991
11742 2016-01-06 1.4084
11743 2016-01-07 1.4061
和
df
Adj_Close Close Date High Low
182 12927.200195 12927.200195 2016-01-04 12928.900391 12748.50
181 12920.099609 12920.099609 2016-01-05 12954.900391 12839.799805
180 12726.799805 12726.799805 2016-01-06 12854.599609 12701.700195
179 12448.200195 12448.200195 2016-01-07 12661.200195 12439.099609
我有一个俗气的循环来通过“加入”公共日期来调整日期以创建新的数据框 (new_df)。
new_df = pd.DataFrame(columns=['date', 'close', 'fx', 'usd'])
for indexFx, rowFx in day.iterrows():
for indexSt, rowSt in df.iterrows(): #this is not efficient
fxDate = str(rowFx.date)[:10] #only keep data component not time
if str(rowSt['Date']) == fxDate:
dateObj = datetime.strptime(rowSt.Date,'%Y-%m-%d')
row = [dateObj, rowSt.Close,rowFx.val, float(rowSt.Close) * float(rowFx.val)]
new_df.loc[len(new_df)] = row
我知道有一种有效的方法来 Pythonize 这个循环。有人可以帮忙吗?
谢谢
【问题讨论】:
-
pd.merge(df, day, left_on='Date', right_on='date')? -
@MaxU 我试过了,但是结果数据框是空白的,没有数据??
-
两个 DF 中的日期是否匹配?
-
df.dtypes和day.dtypes的输出是什么?
标签: python pandas dataframe time-series