如何将行添加到数据框中以组织时间序列

时间:2019-06-25 13:42:49

标签: python pandas

我有一个看起来像这样的数据框

        AUX     TER
11/2014 2.0     10.0
01/2015 23.0    117.0
03/2015 57.0    65.0
04/2015 1.0     1.0
05/2015 16.0    20.0
07/2015 19.0    30.0

我想用0填充不在数据框中的月份值 像这样

        AUX     TER
11/2014 2.0     10.0
12/2014 0       0
01/2015 23.0    117.0
03/2015 57.0    65.0
04/2015 1.0     1.0
05/2015 16.0    20.0
06/2015 0       0
07/2015 19.0    30.0

4 个答案:

答案 0 :(得分:6)

  1. 将索引更改为datetime

    df.index = pd.to_datetime(df.index, format='%m/%Y')
    
  2. asfreqfill_value参数一起使用

    df.asfreq('MS', fill_value=0)
    
                 AUX    TER
    2014-11-01   2.0   10.0
    2014-12-01   0.0    0.0
    2015-01-01  23.0  117.0
    2015-02-01   0.0    0.0
    2015-03-01  57.0   65.0
    2015-04-01   1.0    1.0
    2015-05-01  16.0   20.0
    2015-06-01   0.0    0.0
    2015-07-01  19.0   30.0
    

答案 1 :(得分:2)

您可以将以下内容用于reindex()

s=pd.to_datetime(df.index)
df.reindex(pd.date_range(s.min(),s.max()+pd.DateOffset(months=1),freq='M')
           .strftime('%m/%Y'),fill_value=0)

          AUX    TER
11/2014   2.0   10.0
12/2014   0.0    0.0
01/2015  23.0  117.0
02/2015   0.0    0.0
03/2015  57.0   65.0
04/2015   1.0    1.0
05/2015  16.0   20.0
06/2015   0.0    0.0
07/2015  19.0   30.0

答案 2 :(得分:2)

使用df.resample("M").mean().fillna(0)

例如:

df = pd.read_csv(filename, sep="\s+", parse_dates=['date'])
df.set_index("date", inplace=True)
df = df.resample("M").mean().fillna(0)
df.index = df.index.strftime("%m/%Y")

print(df)

输出:

          AUX    TER
11/2014   2.0   10.0
12/2014   0.0    0.0
01/2015  23.0  117.0
02/2015   0.0    0.0
03/2015  57.0   65.0
04/2015   1.0    1.0
05/2015  16.0   20.0
06/2015   0.0    0.0
07/2015  19.0   30.0

答案 3 :(得分:0)

使用日期时间格式时,可以尝试:

df.resample('MS').mean()

此帖子之后:Python, summarize daily data in dataframe to monthly and quarterly