根据 max 和 min 填写缺失的日期 pandas
Posted
技术标签:
【中文标题】根据 max 和 min 填写缺失的日期 pandas【英文标题】:Fill in missing dates pandas based off max and min 【发布时间】:2018-05-02 08:46:00 【问题描述】:如何为条件语句创建 python 语句
我有一个如下所示的数据框。我想知道如何根据数据框中的最大最小日期填写缺失的日期。
Day Movie Rating
2017-01-01 GreatGatsby 5
2017-01-02 TopGun 5
2017-01-03 Deadpool 1
2017-01-10 PlanetOfApes 2
我怎样才能将缺失的日期填入类似
的内容Day Movie Rating
2017-01-01 GreatGatsby 5
2017-01-02 TopGun 5
2017-01-03 Deadpool 1
2017-01-04 0 0
2017-01-05 0 0
2017-01-06 0 0
2017-01-07 0 0
2017-01-08 0 0
2017-01-09 0 0
2017-01-10 PlanetOfApes 2
【问题讨论】:
【参考方案1】:相信你需要reindex
:
df = (df.set_index('Day')
.reindex(pd.date_range(df['Day'].min(), df['Day'].max()), fill_value=0)
.reset_index())
print (df)
index Movie Rating
0 2017-01-01 GreatGatsby 5
1 2017-01-02 TopGun 5
2 2017-01-03 Deadpool 1
3 2017-01-04 0 0
4 2017-01-05 0 0
5 2017-01-06 0 0
6 2017-01-07 0 0
7 2017-01-08 0 0
8 2017-01-09 0 0
9 2017-01-10 PlanetOfApes 2
【讨论】:
【参考方案2】:使用resample
+ first
/last
/min
/max
:
df.set_index('Day').resample('1D').first().fillna(0).reset_index()
Day Movie Rating
0 2017-01-01 GreatGatsby 5.0
1 2017-01-02 TopGun 5.0
2 2017-01-03 Deadpool 1.0
3 2017-01-04 0 0.0
4 2017-01-05 0 0.0
5 2017-01-06 0 0.0
6 2017-01-07 0 0.0
7 2017-01-08 0 0.0
8 2017-01-09 0 0.0
9 2017-01-10 PlanetOfApes 2.0
如果Day
不是datetime
列,请先使用pd.to_datetime
进行转换:
df['Day'] = pd.to_datetime(df['Day'])
文asfreq
的替代品:
df.set_index('Day').asfreq('D').fillna(0).reset_index()
Day Movie Rating
0 2017-01-01 GreatGatsby 5.0
1 2017-01-02 TopGun 5.0
2 2017-01-03 Deadpool 1.0
3 2017-01-04 0 0.0
4 2017-01-05 0 0.0
5 2017-01-06 0 0.0
6 2017-01-07 0 0.0
7 2017-01-08 0 0.0
8 2017-01-09 0 0.0
9 2017-01-10 PlanetOfApes 2.0
【讨论】:
重采样后再分享一张。df.set_index('Day').resample('D').asfreq().fillna(0).reset_index()
@Wen 看起来很棒。学到了新东西。非常感谢!
对不起,我错过了点击...在我的手机上...df.set_index('Day').asfreq(freq='D').fillna(0).reset_index()
以上是关于根据 max 和 min 填写缺失的日期 pandas的主要内容,如果未能解决你的问题,请参考以下文章