我有15分钟间隔的温度时间序列数据。 如果缺少温度值,我想同时取最近/未来10天的温度值的平均值,并将其替换为nan。
这是我的代码 这将返回一个熊猫系列,其中包含我要保留的na值。
pd.Series(df.index[(df.Temp.isna())]).apply(last10daysmean)
我如何放置以上内容。进入下面的这个?
df.Temp[df.Temp.isna()]
这将返回na插槽。
答案 0 :(得分:2)
您的问题中我没有功能last10daysmean
,所以我可以用它代替:
def last10daysmean(x):
return "TenDaysMeanPlaceholder"
发布问题时,您应该尝试获取示例数据,但我现在可以制作临时数据:
df = pd.DataFrame({
"Temp": [2, 3, 4, 5, 6, np.nan, 3, 4, np.nan]
})
这会用您的isna
函数的虚拟版本的输出填充last10daysmean
行:
df.Temp[df.Temp.isna()] = df.Temp[df.Temp.isna()].apply(last10daysmean)
答案 1 :(得分:1)
您可以尝试通过值应用功能写入行值
df = pd.DataFrame()
df['value'] = np.random.random(len(pd.date_range(start='2019-1-1',end='2019-1-2',freq='15Min')))*10
df.index = pd.date_range(start='2019-1-1',end='2019-1-2',freq='15Min')
df.loc[df['value']<2,'value'
] = np.nan
示例数据框
value
2019-01-01 00:00:00 NaN
2019-01-01 00:15:00 6.100087
2019-01-01 00:30:00 7.953615
2019-01-01 00:45:00 7.214069
2019-01-01 01:00:00 3.697723
2019-01-01 01:15:00 5.772333
2019-01-01 01:30:00 NaN
2019-01-01 01:45:00 2.827144
获取数据帧切片的功能
def last10daysmean(x,ind):
df.loc[ind,'value'] = x.mean()
temp = df.index.map(lambda x: last10daysmean(df['value'].loc[x:x+10],x) if math.isnan(df.loc[x,'value']) else df.loc[x,'value'])
出局:
value
2019-01-01 00:00:00 5.901569
2019-01-01 00:15:00 6.100087
2019-01-01 00:30:00 7.953615
2019-01-01 00:45:00 7.214069
2019-01-01 01:00:00 3.697723
2019-01-01 01:15:00 5.772333
2019-01-01 01:30:00 5.594577
2019-01-01 01:45:00 2.827144
2019-01-01 02:00:00 6.409086