如何将系列设置为数据帧的一部分?

时间:2019-02-03 05:25:02

标签: python pandas dataframe

我有15分钟间隔的温度时间序列数据。 如果缺少温度值,我想同时取最近/未来10天的温度值的平均值,并将其替换为nan。

这是我的代码 这将返回一个熊猫系列,其中包含我要保留的na值。

pd.Series(df.index[(df.Temp.isna())]).apply(last10daysmean)

我如何放置以上内容。进入下面的这个?

df.Temp[df.Temp.isna()] 

这将返回na插槽。

2 个答案:

答案 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