为了账号安全,请及时绑定邮箱和手机立即绑定

完成按熊猫中另一列分组的日期系列并填充缺失的行

完成按熊猫中另一列分组的日期系列并填充缺失的行

斯蒂芬大帝 2023-02-22 17:13:32
我有具有特定 ID 的数据集。对于特定的 ID,我想完成日期系列。因此,例如:如果我在数据集中的最大日期为:'2020-06-01'(YYYY-MM-DD) 和最小日期为:'2020-03-01' 如何在填写时填写缺失的行属性列的值    ID  sale_month   attribute1    attribute20   1   2020-06-01    blue              11   1   2020-05-01    blue              22   1   2020-04-01    blue              33   1   2020-03-01    blue              44   2   2020-05-01    yellow            55   2   2020-04-01    yellow            46   2   2020-03-01    yellow            37   3   2020-05-01    green             78   3   2020-04-01    green             8我想实现这一点:    ID  sale_month   attribute1    attribute20   1   2020-06-01    blue              11   1   2020-05-01    blue              22   1   2020-04-01    blue              33   1   2020-03-01    blue              44   2   2020-06-01    yellow            65   2   2020-05-01    yellow            56   2   2020-04-01    yellow            47   2   2020-03-01    yellow            38   3   2020-06-01    green             69   3   2020-05-01    green             710  3   2020-04-01    green             811  3   2020-03-01    green             9当没有基于 ID 的分组时,我可以通过在日期列上建立索引然后重新索引并使用插值来填充值来做到这一点。我如何在此处使用分组列执行此操作?而且,我可以对不同的列使用不同的插值方法吗?例如,复制attribute1,但在 中进行线性插值attribute2。要复制数据框:df = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2, 2, 3, 3],                    'sale_month' : ['2020-06-01', '2020-05-01', '2020-04-01', '2020-03-01', '2020-05-01', '2020-04-01', '2020-03-01', '2020-05-01', '2020-04-01'],                   'attribute1': [ 'blue', 'blue', 'blue', 'blue', 'yellow', 'yellow', 'yellow', 'green', 'green'],                   'attribute2' : [1, 2, 3, 4, 5, 4, 3, 7, 8 ]})df.sale_month = pd.to_datetime(df.sale_month)
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

您可以MultiIndex.from_product使用pd.date_range:


dates = pd.date_range(df["sale_month"].min(), df["sale_month"].max(), freq="MS")


s = pd.MultiIndex.from_product([df["ID"].unique(), reversed(dates)],names=df.columns[:2])


df = df.set_index(["ID","sale_month"]).reindex(s).reset_index()


df["attribute1"] = df.groupby('ID')["attribute1"].transform("first")


print (df)


    ID sale_month attribute1  attribute2

0    1 2020-06-01       blue         1.0

1    1 2020-05-01       blue         2.0

2    1 2020-04-01       blue         3.0

3    1 2020-03-01       blue         4.0

4    2 2020-06-01     yellow         NaN

5    2 2020-05-01     yellow         5.0

6    2 2020-04-01     yellow         4.0

7    2 2020-03-01     yellow         3.0

8    3 2020-06-01      green         NaN

9    3 2020-05-01      green         7.0

10   3 2020-04-01      green         8.0

11   3 2020-03-01      green         NaN


查看完整回答
反对 回复 2023-02-22
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信