大熊猫。通过数据范围将resampled df与原始df连接起来

时间:2017-06-07 15:01:10

标签: python pandas

我需要根据日期时间范围加入2个数据帧。 我已经谷歌搜索/堆栈跟踪,并找到了一些可能的工作。

由于我重新采样数据并希望将聚合版本加入原始版本,我认为可能有一种方法可以通过添加"加入条件列来模拟重采样"表示可能的聚合日期时间。

这是我的基础:

import pandas as pd
import numpy as np
import quandl

df = quandl.get("WIKI/GOOGL")
df = df.ix[:, ['Close']]

print('***************** ORIG')
print(df.head(10).to_string())

ac = df['Close'].resample('3D').mean()

print('***************** RESAMPLED')
print(ac.head(10).to_string())


frames = [ac]
ac2 = pd.concat(frames, axis=1, join='inner')

print('***************** RESAMPLED 2')
print(ac2.head(10).to_string())



#new = pd.merge(df, ac2, on=df.index, how='left')  

#print('***************** JOIN')
#print(new.to_string())

这是输出:

***************** ORIG
              Close
Date               
2004-08-19  100.335
2004-08-20  108.310
2004-08-23  109.400
2004-08-24  104.870
2004-08-25  106.000
2004-08-26  107.910
2004-08-27  106.150
2004-08-30  102.010
2004-08-31  102.370
2004-09-01  100.250
***************** RESAMPLED
Date
2004-08-19    104.322500
2004-08-22    107.135000
2004-08-25    106.686667
2004-08-28    102.010000
2004-08-31    101.376667
2004-09-03    100.010000
2004-09-06    101.940000
2004-09-09    103.820000
2004-09-12    109.495000
2004-09-15    114.486667
Freq: 3D
如果我可以计算一个新列

,那就太酷了
***************** ORIG
              Close   newDate
Date               
2004-08-19  100.335   2004-08-19
2004-08-20  108.310   2004-08-19
2004-08-23  109.400   2004-08-22
2004-08-24  104.870   2004-08-22
2004-08-25  106.000   2004-08-25
2004-08-26  107.910   2004-08-25 
2004-08-27  106.150   2004-08-25 
2004-08-30  102.010   2004-08-28
2004-08-31  102.370   2004-08-31
2004-09-01  100.250   2004-08-31

并使用此加入条件...

但我并不急于在循环中重新编程重新采样...如果你想建议...... :)

任何想法?

谢谢! 即

****编辑**** 我找到了改变日期的解决方案。现在我能加入:)。

print('***************** RESAMPLED 2')
ac2['folgep'] = ac2.index.shift(1)
ac2['DatumJoin'] = ac2.index
print(ac2.head(10).to_string())


df['matched'] = np.piecewise(df.index, [(df.index >= start_date)&(df.index <= end_date) for start_date, end_date in zip(ac2.index, ac2.folgep.values)], ac2.DatumJoin)

print('***************** after join')
print(df.head(10).to_string())

1 个答案:

答案 0 :(得分:2)

您只需reindex重新采样的数据:

df['Close3D'] = df.Close.resample('3D').mean().reindex(df.index, method='ffill')