我正在从一个现有文件创建一个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
如果我了解您的问题,那么以下内容将为您提供帮助。这确实假设您始终拥有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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。