假设我们有以下数据框:
# data
t = pd.to_datetime(pd.Series(['2015-01-01', '2015-02-01', '2015-03-01', '2015-04-01', '2015-01-01', '2015-02-01']))
g = pd.Series(['A', 'A', 'A', 'A', 'B', 'B'])
v = pd.Series([12.1, 14.2, 15.3, 16.2, 12.2, 13.7])
df = pd.DataFrame({'time': t, 'group': g, 'value': v})
# show data
>>> df
time group value
0 2015-01-01 A 12.1
1 2015-02-01 A 14.2
2 2015-03-01 A 15.3
3 2015-04-01 A 16.2
4 2015-01-01 B 12.2
5 2015-02-01 B 13.7
我最终想要的是以下数据框:
>>> df
time group value
0 2015-01-01 A 12.1
1 2015-02-01 A 14.2
2 2015-03-01 A 15.3
3 2015-04-01 A 16.2
4 2015-01-01 B 12.2
5 2015-02-01 B 13.7
6 2015-03-01 B 13.7
7 2015-04-01 B 13.7
应添加组B
中缺少的观察值,缺失值应默认为最后观察到的值。
我怎样才能做到这一点?提前谢谢!
答案 0 :(得分:1)
您可以使用pivot
进行重塑, Then stop demo and start again. Sure it will work
ffill
(fillna
使用方法NaN
),并使用unstack
重塑为原始版本{ {3}}:
ffill
另一个解决方案首先找到reset_index
date_range
和min
print (df.pivot(index='time',columns='group',values='value')
.ffill()
.unstack()
.reset_index(name='value'))
group time value
0 A 2015-01-01 12.1
1 A 2015-02-01 14.2
2 A 2015-03-01 15.3
3 A 2015-04-01 16.2
4 B 2015-01-01 12.2
5 B 2015-02-01 13.7
6 B 2015-03-01 13.7
7 B 2015-04-01 13.7
的值max
。然后groupby
resample
time
与D
:
注意:
我认为您忘记了to_datetime
中的参数ffill
,如果最后一个号码是format='%Y-%d-%m'
:
month