繁体   English   中英

如何使用 Pandas DataFrame 中的最后一个条目填充缺失的日期?

[英]How can I fill missing dates with the last entry in a pandas DataFrame?

假设我有以下数据:

data = [{"id":1,"date":" 1-1-2001","f1":1,"f2":0,"f3":1},{"id":1,"date":" 2-1-2001","f1":2,"f2":1,"f3":1},{"id":1,"date":" 3-1-2001","f1":3,"f2":1,"f3":1},{"id":2,"date":" 1-1-2001","f1":1,"f2":0,"f3":1},{"id":2,"date":" 3-1-2001","f1":3,"f2":2,"f3":1},{"id":3,"date":" 1-1-2001","f1":1,"f2":0,"f3":1},{"id":3,"date":" 2-1-2001","f1":5,"f2":3,"f3":3}]
df = pd.DataFrame(data)

        date  f1  f2  f3  id
0   1-1-2001   1   0   1   1
1   3-1-2001   2   1   1   1
2   4-1-2001   3   1   1   1
3   1-1-2001   1   0   1   2
4   4-1-2001   3   2   1   2
5   1-1-2001   1   0   1   3
6   3-1-2001   5   3   3   3

在上面的数据中,每一行都应该用“id”标签来标识,但是 id 的 2 和 3 都缺少来自具有 ID 1 条目的日期的条目。有没有一种简单的方法可以创建这些带有其他日期的行ID 有,但是用他们以前的条目填充它们? 所需的输出是:

        date  f1  f2  f3  id
0   1-1-2001   1   0   1   1
1   3-1-2001   2   1   1   1
2   4-1-2001   3   1   1   1
3   1-1-2001   1   0   1   2
4   3-1-2001   1   0   1   2
5   4-1-2001   3   2   1   2
6   1-1-2001   1   0   1   3
7   3-1-2001   5   3   3   3
8   4-1-2001   5   3   3   3

请记住,我不想为数据集中不存在的日期创建行。 本质上,如果我的“日期”列中已经存在一个日期,我想确保每个 ID 都有该日期对应的一行。 例如,如果 ID 101 具有 1 月 3 日的条目但 ID 103 没有,我想为 ID 103, 1 月 3 日创建一行,其中填充来自其前一个数据点(1 月 2 日)的特征数据,或数据集中的前一个日期)。

我希望我的问题足够清楚。 如果不是,我很乐意在评论中澄清。

您可以使用from_product方法创建一个pandas.MultiIndex

使用它来重新索引您的DataFrame然后使用DataFrame.ffill填充 NaN 值。

idx = pd.MultiIndex.from_product([df['date'].unique(), df['id'].unique()],
                                 names=['date', 'id'])

df_fixed = df.set_index(['date', 'id']).reindex(idx).reset_index().sort_values('id').ffill()

df_fixed = df_fixed.loc[:, df.columns].astype(df.dtypes)

[出去]

       date  f1  f2  f3  id
0  1-1-2001   1   0   1   1
3  3-1-2001   2   1   1   1
6  4-1-2001   3   1   1   1
1  1-1-2001   1   0   1   2
4  3-1-2001   1   0   1   2
7  4-1-2001   3   2   1   2
2  1-1-2001   1   0   1   3
5  3-1-2001   5   3   3   3
8  4-1-2001   5   3   3   3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM