【问题标题】:Complete days in data from a DataFrame grouped by group by来自按组分组的 DataFrame 数据中的完整天数
【发布时间】:2020-05-06 06:19:39
【问题描述】:

我有这个数据框: DataFrame 我应用了 df.groupby ('site') 来通过这个特性对数据进行分类。

   grouped = Datos.groupby('site')

分类后,我想逐日完成所有记录的“日期”列。 我认为我应该遵循的程序是: 1. 生成开始日期和结束日期之间的完整序列。 (步骤完成)。

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)}
  1. 将此序列与我的 groupby 的“日期”列进行比较。 ('Site) 并添加那些不存在的与'日期'中的日期不匹配的日期。
  2. 编写一个函数或循环,允许您使用新日期更新“日期”列,并使用 0 补全缺失值。
(grouped.apply(add_days))

到目前为止,我只完成了第 1 步,所以我请求您帮助完成第 2 步和第 3 步。 我非常感谢您一直以来的重要帮助。 问候

【问题讨论】:

    标签: python dataframe time-series pandas-groupby


    【解决方案1】:

    我必须为一个项目做同样的事情: 也许这对您来说不是最好的解决方案,但它可以帮助您。 (我希望能避免我的头痛) 这是我在https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html的帮助下管理它的方法

    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()
    

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

    数据: 日期站点值 value2 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: 场地价值 value2 日期 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 站点 1 11.0 -11.0 站点2 22.0 -22.0

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      相关资源
      最近更新 更多