Python 填写缺失的日期
我有一个数据框,包含来自不同地区和不同日期的温度读数 我想为温度为零的每个位置添加缺少的日期 例如:Python 填写缺失的日期,python,pandas,date,datetime,dataframe,Python,Pandas,Date,Datetime,Dataframe,我有一个数据框,包含来自不同地区和不同日期的温度读数 我想为温度为零的每个位置添加缺少的日期 例如: df=pd.DataFrame({"area_id":[1,1,1,2,2,2,3,3,3], "reading_date":["13/1/2017","15/1/2017" ,"16/1/2017","22/3/2017","26/3/2017"
df=pd.DataFrame({"area_id":[1,1,1,2,2,2,3,3,3],
"reading_date":["13/1/2017","15/1/2017"
,"16/1/2017","22/3/2017","26/3/2017"
,"28/3/2017","15/5/2017"
,"16/5/2017","18/5/2017"],
"temp":[12,15,22,6,14,8,30,25,33]})
如下图所示,用什么最有效的方法来填补每个区域的日期差距(用零表示)
非常感谢。使用:
- 首先转换为datetime列
by读取日期
- 对于
和DatetimeIndex
,使用groupby
resample
- 对于
添加系列
- 将
s替换为NaN
- 上次添加来自
多索引的列
使用
reindex
。定义一个自定义函数来处理重新索引操作,并在groupby.apply中调用它
def reindex(x):
# Thanks to @jezrael for the improvement.
return x.reindex(pd.date_range(x.index.min(), x.index.max()), fill_value=0)
接下来,首先使用pd将读取日期转换为日期时间
df.reading_date = pd.to_datetime(df.reading_date)
现在,执行一个groupby
df = (
df.set_index('reading_date')
.groupby('area_id')
.temp
.apply(reindex)
.reset_index()
)
df.columns = ['area_id', 'reading_date', 'temp']
df = (
df.set_index('reading_date')
.groupby('area_id')
.temp
.apply(reindex)
.reset_index()
)
df.columns = ['area_id', 'reading_date', 'temp']
df
area_id reading_date temp
0 1 2017-01-13 12.0
1 1 2017-01-14 0.0
2 1 2017-01-15 15.0
3 1 2017-01-16 22.0
4 2 2017-03-22 6.0
5 2 2017-03-23 0.0
6 2 2017-03-24 0.0
7 2 2017-03-25 0.0
8 2 2017-03-26 14.0
9 2 2017-03-27 0.0
10 2 2017-03-28 8.0
11 3 2017-05-15 30.0
12 3 2017-05-16 25.0
13 3 2017-05-17 0.0
14 3 2017-05-18 33.0