假设我们具有以下两个时间序列ts_1
和ts_2
:
d = {'date': ['2018-01-01',
'2018-01-02 12:00:00.000',
'2018-01-02 13:00:00.000',
'2018-01-03',
'2018-01-04'],
'value': [9, 11, 12, 11, 8]}
df = pd.DataFrame(d)
df['date'] = pd.to_datetime(df['date'])
ts_1 = pd.Series(df['value'].values, index=df['date']).resample('D').count()
greater10 = df[df['value']>10]
ts_2 = pd.Series(greater10['value'].values, index=greater10['date']).resample('D').count()
很显然,两个时间序列都没有相同的起点和终点(因此长度也相同),这正是我所需要的。
如何对齐起点和终点的最大值?缺少的值应用0
填充。
答案 0 :(得分:2)
我认为,如果需要时间序列的第一个和最后一个值,则需要iloc concat
:
df = pd.concat([ts_1.iloc[[0, -1]],
ts_2.iloc[[0, -1]]], axis=1, keys=('ts1','ts2')).fillna(0)
print (df)
ts1 ts2
date
2018-01-01 1.0 0.0
2018-01-02 0.0 2.0
2018-01-03 0.0 1.0
2018-01-04 1.0 0.0
如果只需要对齐时间序列:
df = pd.concat([ts_1, ts_2], axis=1, keys=('ts1','ts2')).fillna(0)
print (df)
ts1 ts2
date
2018-01-01 1 0.0
2018-01-02 2 2.0
2018-01-03 1 1.0
2018-01-04 1 0.0
另一种解决方案是使用Series.align
:
s11, s12 = ts_1.align(ts_2, fill_value=0)
print (s11)
date
2018-01-01 1
2018-01-02 2
2018-01-03 1
2018-01-04 1
Freq: D, dtype: int64
print (s12)
date
2018-01-01 0.0
2018-01-02 2.0
2018-01-03 1.0
2018-01-04 0.0
Freq: D, dtype: float64
s21, s22 = ts_2.align(ts_1, fill_value=0)
print (s21)
date
2018-01-01 0.0
2018-01-02 2.0
2018-01-03 1.0
2018-01-04 0.0
Freq: D, dtype: float6
print (s22)
date
2018-01-01 1
2018-01-02 2
2018-01-03 1
2018-01-04 1
Freq: D, dtype: int64
答案 1 :(得分:1)
您应该可以从documentation进行
result = pd.concat([ts_1, ts_2], axis=1, join_axes=[ts_1.index])
假设您希望将索引保留在ts_1