pandas DataFrame以每组为基础插入/重新采样每日数据

时间:2016-12-06 14:53:02

标签: python pandas time-series

我有一个如下所示的数据框:

   userid      date          count
    a           2016-12-01    4
    a           2016-12-02    0
    a           2016-12-03    5
    a           2016-12-04    0
    a           2016-12-05    1
    b           2016-11-17    14
    b           2016-11-18    15
    b           2016-11-19    0
    b           2016-11-20    0
    b           2016-11-21    0
    b           2016-11-22    0
    b           2016-11-23    4

第一列是用户ID,第二列是日期(由groupby(pd.TimeGrouper(' d')生成),第三列是每日计数。但是,每列用户,我想确保用户的最小和最大日期之间缺少的任何日期在每个用户的基础上填写为0。所以,如果我开始使用如上所述的数据框,我最终会使用这样的数据框:

grouped_users = user_daily_counts.groupby('user').set_index('timestamp').resample('d', fill_method = None)

我知道有多种方法可以使用pandas数据帧进行重新采样(使用选项进行向前,向后或平均进行插值)但是我如何在上面的意义上执行此操作,我希望连续时间每个用户ID的系列,但每个用户的时间序列日期不同?

这是我尝试过的没有用的东西:

AttributeError: Cannot access callable attribute 'set_index' of 'DataFrameGroupBy' objects, try using the 'apply' method

然而,这会引发错误apply。我不确定我是如何使用String sSql = "CREATE TABLE [" + sDatabaseName + "].[" + sSchema + "].[" + sTableName + "] (" + sSqlFields + ")"; Session session = getSession(); Query q = session.createSQLQuery(sSql); q.executeUpdate(); 方法,同时提出我想做的所有列。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:5)

您可以将groupbyresample一起使用,但首先需要set_index创建的Datetimeindex
need pandas 0.18.1 and higher

然后NaNasfreq 0填充userid

上次删除列df = df.set_index('date') .groupby('userid') .resample('D') .asfreq() .fillna(0) .drop('userid', axis=1) .reset_index() print (df) userid date count 0 a 2016-12-01 4.0 1 a 2016-12-02 0.0 2 a 2016-12-03 5.0 3 a 2016-12-04 0.0 4 a 2016-12-05 1.0 5 b 2016-11-17 14.0 6 b 2016-11-18 15.0 7 b 2016-11-19 0.0 8 b 2016-11-20 0.0 9 b 2016-11-21 0.0 10 b 2016-11-22 0.0 11 b 2016-11-23 4.0 fillna

count

如果想要列df = df.set_index('date') \ .groupby('userid') \ .resample('D') \ .asfreq() \ .fillna(0) \ .drop('userid', axis=1) \ .astype(int) \ .reset_index() print (df) userid date count 0 a 2016-12-01 4 1 a 2016-12-02 0 2 a 2016-12-03 5 3 a 2016-12-04 0 4 a 2016-12-05 1 5 b 2016-11-17 14 6 b 2016-11-18 15 7 b 2016-11-19 0 8 b 2016-11-20 0 9 b 2016-11-21 0 10 b 2016-11-22 0 11 b 2016-11-23 4 的dtype整数添加reset_index

map(x->x[2], S)