0
我需要基於日期時間範圍加入2個數據幀。 我已經爲它搜索/堆棧並找到了一些可能的解決辦法。熊貓。以數據範圍加入重新採樣的df與原始df
由於我重新採樣數據並希望將聚合版本加入原始數據,我認爲可能有一種方法可以通過添加代表可能的聚集日期時間的「連接標準列」來模擬重新採樣。
這是我的基地:
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
和使用這是一個加入標準...
但我不急於重新編程循環中的resample ...如果你想建議... :)
任何想法?
謝謝! E.
****編輯**** 我找到了解決方案來轉移日期。現在我能加入:)
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())
偉大的解決方案!無需加入:)謝謝! @emulbreh – Ele