所有,我是 Python 的新手,并且遇到以下问题。我有一个 DF 作为:
ipdb> DF
asofdate port_id
1 2010-01-01 76
2 2010-04-01 43
3 2011-02-01 76
4 2013-01-02 93
5 2017-02-01 43
对于年度差距,比如 2012、2014、2015 和 2016,我想使用每个缺失年份的新年日期和前一年的 port_id 来填补差距。理想情况下,我想:
ipdb> DF
asofdate port_id
1 2010-01-01 76
2 2010-04-01 43
3 2011-02-01 76
4 2012-01-01 76
5 2013-01-02 93
6 2014-01-01 93
7 2015-01-01 93
8 2016-01-01 93
9 2017-02-01 43
我尝试了多种方法,但仍然无济于事。一些专家可以告诉我如何解决这个问题吗?提前致谢!
最佳答案
您可以使用 set.difference
和 range
来查找缺失的日期,然后附加一个数据框:
# convert to datetime if not already converted
df['asofdate'] = pd.to_datetime(df['asofdate'])
# calculate missing years
years = df['asofdate'].dt.year
missing = set(range(years.min(), years.max())) - set(years)
# append dataframe, sort and front-fill
df = df.append(pd.DataFrame({'asofdate': pd.to_datetime(list(missing), format='%Y')}))\
.sort_values('asofdate')\
.ffill()
print(df)
asofdate port_id
1 2010-01-01 76.0
2 2010-04-01 43.0
3 2011-02-01 76.0
1 2012-01-01 76.0
4 2013-01-02 93.0
2 2014-01-01 93.0
3 2015-01-01 93.0
0 2016-01-01 93.0
5 2017-02-01 43.0
关于python - 在 Python 数据框中按年度填补空白的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52526818/