【问题标题】:How to use fillna together with groupby for time series?如何将fillna与groupby一起用于时间序列?
【发布时间】:2018-05-25 04:39:15
【问题描述】:

我有以下数据集:

Date,Day,A,B,C  
2015/03/23,Mo,60085,105744,18623  
2015/03/24,Tu,41472,70327,14775  
2015/03/25,We,46644,81693,17168  
2015/03/26,Th,43640,74615,15577  
2015/03/27,Fr,37503,67754,13278  
2015/03/28,Sa,,,  
2015/03/29,Su,,,  
2015/03/30,Mo,61904,108128,19600  
2015/03/31,Tu,48376,80326,17512  
2015/04/01,We,48529,,17815  
2015/04/02,Th,45491,74744,15524  
2015/04/03,Fr,,,  
2015/04/04,Sa,,,  
2015/04/05,Su,,,  
2015/04/06,Mo,,,  
2015/04/07,Tu,65738,120412,19082  
2015/04/08,We,44792,81468,16796  
2015/04/09,Th,40930,70810,13664  
2015/04/10,Fr,39367,60249,11882  

我想在周一至周五填写所有 NA:

  1. 前几周的值
  2. 上一个和下一个的平均值

所以在 2015/04/01 我想要:

  1. 81693
  2. (81693+81468)/2=81580.5

我认为我可以将 groupby 和 fillna 与 ffill 一起使用,但我不确定这是否可行或者是否是最好的方法。

【问题讨论】:

  • 我建议您在这个问题中添加更多数据,并列出您从该数据获得的预期结果。请参阅this post,了解如何解决 Pandas 问题。

标签: python pandas pandas-groupby


【解决方案1】:

我假设没有一个日期丢失。

df['date'] = df['date].map(lambda x:datetime.strptime(x,"%d/%m/%Y"))
df.sort_values(by=['date'],inplace=True)
cols = ['v1','v2','v3','v4']
cols_last_week = [i+'_last_week' for i in cols]
df[cols_last_week] = df[cols].shiftby(7)

假设 v1 有空值

df.loc[df['v1'].isnull(),'v1'] = df.loc[df['v1'].isnull(),'v1_last_week']

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    • 2020-11-22
    • 2014-05-10
    • 2021-01-20
    • 2018-09-21
    相关资源
    最近更新 更多