我有一个看起来像这样的数据框
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
答案 0 :(得分:6)
将索引更改为datetime
df.index = pd.to_datetime(df.index, format='%m/%Y')
将asfreq
与fill_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