将缺少的日期时间列添加到分组的数据框中

时间:2019-02-04 19:18:45

标签: python pandas

是否可以将缺少的日期列从创建的date_range添加到分组的数据帧df中,而无需for循环并将零填充为缺少的值? date_range有7个日期元素。 df有4个日期列。那么如何将3个缺少的列添加到df?

before_action

2 个答案:

答案 0 :(得分:1)

我将数据表旋转为行,然后使用pandas的.asfreq函数,如下所示:

DataFrame.asfreq(freq,method = None,how = None,normalize = False,fill_value = None)

来源: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.asfreq.html

答案 1 :(得分:1)

感谢Sina Shabani提供了将日期列设置为行的线索。在这种情况下,出现了更合适的设置日期作为索引并使用.reindex的方法

df = (df.groupby(['date', 'name'])['name']
        .size()
        .reset_index(name='count')
        .pivot(index='date', columns='name', values='count')
        .fillna(0))

df

name    alex    kovar   lyam    sogan   yamo
date                    
2018-06-07  0.0 0.0 0.0 1.0 0.0
2018-06-08  0.0 2.0 0.0 0.0 0.0
2018-06-09  2.0 1.0 0.0 0.0 0.0
2018-06-10  0.0 0.0 1.0 0.0 3.0

df.index = pd.DatetimeIndex(df.index)

df = (df.reindex(pd.date_range(start, freq='D', periods=7), fill_value=0)
        .sort_index())
df

name    alex    kovar   lyam    sogan   yamo
2018-06-04  0.0 0.0 0.0 0.0 0.0
2018-06-05  0.0 0.0 0.0 0.0 0.0
2018-06-06  0.0 0.0 0.0 0.0 0.0
2018-06-07  0.0 0.0 0.0 1.0 0.0
2018-06-08  0.0 2.0 0.0 0.0 0.0
2018-06-09  2.0 1.0 0.0 0.0 0.0
2018-06-10  0.0 0.0 1.0 0.0 3.0

df.T
    date    2018-06-07 00:00:00 2018-06-08 00:00:00 2018-06-09 00:00:00 2018-06-10 00:00:00
name                
alex    0.0 0.0 2.0 0.0
kovar   0.0 2.0 1.0 0.0
lyam    0.0 0.0 0.0 1.0
sogan   1.0 0.0 0.0 0.0
yamo    0.0 0.0 0.0 3.0