我的数据框包含来自不同区域和不同日期的温度读数
我想为温度为零的每个地点添加缺少的日期
例如:
df = pd.read_csv('MatplotLibTSManipulation.csv')
df.Date = pd.to_datetime(df.Date, format='%d-%m-%Y %H:%M:%S')
ax = df.set_index('Date').plot()
填充每个区域的日期差距(通过零)的最有效方法是什么,如下所示
非常感谢。
答案 0 :(得分:3)
使用:
to_datetime
xsl:if
set_index
代表reading_date
和DatetimeIndex
groupby
resample
add asfreq
Series
替换为fillna
NaN
reset_index
MultiIndex
答案 1 :(得分:2)
使用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)
接下来,使用reading_date
,
pd.to_datetime
转换为日期时间
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
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