大熊猫中的重新采样时间序列数据填充了NAN的先前数据



我有一些时间序列数据,主要是季度的,但以多个变量和多个国家/地区的年度格式报告,但是某些日期的某些变量已发布在最后一天该季度和其他人可能会在最后一天发布。我想执行一个重新采样,将每行汇总到四分之一的频率结束。我有这个:

Date          Country Var1 Var2 Var3
2012-03-30    China   12   Nan   200
2012-03-31    China   Nan  50    Nan
2012-06-28    China   13   Nan   199
2012-06-30    China   Nan  48    Nan
2012-09-30    China   13   49    200
2012-12-31    China   12   50    201

我想看到的是

Date          Country Var1 Var2 Var3
2012-03-31    China   12   50    200
2012-06-30    China   13   48    199
2012-09-30    China   13   49    200
2012-12-31    China   12   50    201

我尝试了几个不同的重新采样想法。首先,我尝试了

    df=df.groupby("Country").resample('Q').applymap(lambda x: df.shift(1) if math.isnan(x) else x)

然后,我尝试将所有NAN转换为零,然后按总和进行汇总,但这不是理想的选择,因为我无法跟踪哪些数据实际为零且缺少哪些数据。

    df=df.fillna(0) 
    df=df.groupby("Country").resample('Q').sum()

以下是我自己的数据帧做您想要的一个小例子。

# creating the dataframe
df = pd.DataFrame(np.random.randn(8, 3), columns=['Var1', 'Var2', 'Var3'])
# adding NaN values
df.iloc[1]['Var1'] = np.nan
df.iloc[5]['Var1'] = np.nan
df.iloc[4]['Var2'] = np.nan
df.iloc[6]['Var2'] = np.nan
df
'''
    Var1        Var2        Var3
0   -0.437551   -2.707623   0.726240
1   NaN         2.529733    0.484732
2   0.199278    -0.316516   -0.655426
3   0.732910    -0.638045   -0.706436
4   0.877915    NaN         -1.141384
5   NaN         -2.050228   2.091994
6   -1.119849   NaN         1.222602
7   0.406632    -2.255687   0.742452
'''
# backfilling values in Var2
df['Var2'] = df['Var2'].fillna(method='backfill').dropna()
# dropping NaN rows based on column Var1
df.dropna()
df
'''
    Var1        Var2        Var3
0   -0.437551   -2.707623   0.726240
2   0.199278    -0.316516   -0.655426
3   0.732910    -0.638045   -0.706436
4   0.877915    -2.050228   -1.141384
6   -1.119849   -2.255687   1.222602
7   0.406632    -2.255687   0.742452
'''

相关内容

  • 没有找到相关文章

最新更新