Python 按分组的数据框中数据的完整天数

Python 按分组的数据框中数据的完整天数,python,dataframe,time-series,pandas-groupby,Python,Dataframe,Time Series,Pandas Groupby,我有这个数据框: 我应用df.groupby('site')按此功能对数据进行分类 grouped = Datos.groupby('site') 分类之后,我想每天为所有记录填写“日期”栏。 我认为我应该遵循的程序是: 1.在开始日期和结束日期之间生成完整的序列。(步骤已完成) 将此序列与my groupby的“日期”列进行比较。(“站点”)并添加那些不存在且与“日期”中的日期不匹配的内容 编写一个函数或循环,允许您使用新日期更新“date”列,并使用0完成缺少的值 到目前为止,我只完

我有这个数据框: 我应用df.groupby('site')按此功能对数据进行分类

   grouped = Datos.groupby('site')
分类之后,我想每天为所有记录填写“日期”栏。 我认为我应该遵循的程序是: 1.在开始日期和结束日期之间生成完整的序列。(步骤已完成)

  • 将此序列与my groupby的“日期”列进行比较。(“站点”)并添加那些不存在且与“日期”中的日期不匹配的内容
  • 编写一个函数或循环,允许您使用新日期更新“date”列,并使用0完成缺少的值
  • 到目前为止,我只完成了步骤1,因此我请求您帮助我完成步骤2和步骤3。 我非常感谢你一直以来的重要帮助。
    关于

    我必须为一个项目做同样的事情: 也许这不是你的最佳解决方案,但它可以帮助你。(我希望你不要再为我头疼了) 下面是我如何在

    df_日期范围:
    日期 0 2019-12-31 1 2020-01-01 2 2020-01-02 3 2020-01-03 4 2020-01-04 5 2020-01-05

    达托斯: 日期站点值2 0 2020-01-01站点1 1-1 1 2020-01-01站点2 2-2 2 2020-01-02地点1 10-10 3 2020-01-02地点2 20-20

    df1: 场地价值2 日期 2019-12-31 0.0 0.0 2020-01-01站点1 1.0-1.0 2020-01-01站点2 2.0-2.0 2020-01-02站点1 10.0-10.0 2020-01-02站点2 20.0-20.0 2020-01-03 0.0 0.0 2020-01-04 0.0 0.0 2020-01-05 0.0 0.0

    分组= 价值2 网站 0.0 0.0 site1 11.0-11.0 site2 22.0-22.0

    for site in grouped:
        dates = ['2018-01-01', '2020-01-17']
        startDate = datetime.datetime.strptime( dates[0], "%Y-%m-%d") # parse first date
        endDate   = datetime.datetime.strptime( dates[-1],"%Y-%m-%d") # parse last date 
        days = (endDate - startDate).days  # how many days between?
        allDates = {datetime.datetime.strftime(startDate+datetime.timedelta(days=k), 
                                            "%Y-%m-%d"):0 for k in range(days+1)}
    
    (grouped.apply(add_days))
    
    df_DateRange=pd.DataFrame()
    df_1=pd.DataFrame()
    grouped=pd.DataFrame()
    
    #1. Create a DataFrame with alldays (your step2):
    #Create a DataFrame with alldays
    dates_list = ['2019-12-31', '2020-01-05']
    df_DateRange['date']=pd.date_range(start=dates_list [0],end=dates_list [-1],freq='1D')
    df_DateRange['date']=df_DateRange['date'].dt.strftime('%Y-%m-%d')
    df_DateRange.set_index(['date'],inplace=True)
    
    #Set index of you Datos DataFrame:
    Datos.set_index(['date'], inplace=True)
    
    #Join both DataFrame:
    df_1=df_DateRange.join(Datos)
    
    
    #2. Replace the NaN:
    df_1['site'].fillna("", inplace=True)
    df_1['value'].fillna(0, inplace=True)
    df_1['value2'].fillna(0, inplace=True)
    
    
    #3. do the calculation:
    grouped = df_1.groupby('site').sum()