开发者社区> 问答> 正文

使用上一年的现有行将新行添加到数据框

我正在从一个现有文件创建一个Pandas数据框,它基本上像这样结束。

import pandas as pd
import datetime
data = [[i, i+1] for i in range(14)]
index = pd.date_range(start=datetime.date(2019,1,1), end=datetime.date(2020,2,1), freq='MS')
columns = ['col1', 'col2']
df = pd.DataFrame(data, index, columns)

请注意,这并不是一路走到现在-通常我要从中提取的文件落后一个月或两个月。然后,我需要做的是添加所有缺失的月份,并用与上一年相同的值填充它们。

所以在这种情况下,我需要添加另一行

2020-03-01   2   3

它可以是0-2行中的任意行,需要在给定的时间点添加到数据帧的末尾。最好的方法是什么?

注意:这里的数据不是真实的,因此请不要利用我上面给出的简单输入模式。作为示例,这只是填充表的两列的一种快速方法。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 21:39:57 439 0
1 条回答
写回答
取消 提交回答
  • 如果我了解您的问题,那么以下内容将为您提供帮助。这确实假设您始终拥有12个月前的数据。您可以定义一个新的DataFrame,其中包括最近日期之前的月份。

    # First create the new index. Get the most recent date and add an offset.
    start, end = df.index[-1] + pd.DateOffset(), pd.Timestamp.now()
    index_new = pd.date_range(start, end, freq='MS') 
    

    创建您的DataFrame

    # Get the data from the previous year.
    data = df.loc[index_new - pd.DateOffset(years=1)].values
    df_new = pd.DataFrame(data, index = index_new, columns=df.columns)
    

    看起来像

                col1    col2
    2020-03-01     2       3
    

    然后使用

    pd.concat([df, df_new], axis=0)
    

    这使

               col1  col2
    2019-01-01    0     1
    2019-02-01    1     2
    2019-03-01    2     3
    ...         ...   ...
    2020-02-01   13    14
    2020-03-01    2     3
    

    * 注意

    这对于丢失的月份数大于1的情况也适用。

    * 编辑

    变化略有不同

    # Create series with missing months added.
    # Get the corresponding data 12 months prior.
    s = pd.date_range(df.index[0], pd.Timestamp.now(), freq='MS')
    fill = df.loc[s[~s.isin(df.index)] - pd.DateOffset(years=1)]
    
    # Reindex the original dataframe
    df = df.reindex(s)
    
    # Find the dates to fill and replace with lagged data
    df.iloc[-1 * fill.shape[0]:] = fill.values
    

    回答来源:stackoverflow

    2020-03-24 21:40:04
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载