在Pandas 0.14.1中,diff()在时间序列开始时不会生成值。

使用diff()似乎将丢失数据与cumsum()不同,后者假定NaN ==0。我想知道是否有一种方法可以使diff()假定先前丢失的数据为0(丢失,因为它是从一开始就开始的)时间序列)。

例如:

    >print df

    2014-05-01  A     Apple        1
                B     Banana       2
    2014-06-01  A     Apple        3
                B     Banana       4

结果是:
    >print df.groupby(level=[1,2]).diff()

    2014-05-01  A     Apple        NaN
                B     Banana       NaN
    2014-06-01  A     Apple        2
                B     Banana       2

当所需的输出是:
    2014-05-01  A     Apple        1
                B     Banana       2
    2014-06-01  A     Apple        2
                B     Banana       2

最佳答案

据我所知,groupby(...).diff()只调用np.diff,它总是返回比传递给它的数组短1(或n)的数组。

但是,仅填充丢失的数据应该非常容易。像这样吗?

In [175]: df
Out[175]:
                     d
a          b c
2014-05-01 A Apple   1
           B Banana  2
2014-06-01 A Apple   3
           B Banana  4

In [176]: df['diff'] = df.groupby(level=[1,2])['d'].diff()

In [177]: df['diff'] = df['diff'].fillna(df['d'])

In [178]: df
Out[178]:
                     d  diff
a          b c
2014-05-01 A Apple   1     1
           B Banana  2     2
2014-06-01 A Apple   3     2
           B Banana  4     2

关于python - 时间序列的第一条记录上的Pandas Diff(),缺少的数据返回NaN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25289132/

10-11 22:22
查看更多