Python 在数据框中添加缺少的天数

Python 在数据框中添加缺少的天数,python,pandas,dataframe,date,missing-data,Python,Pandas,Dataframe,Date,Missing Data,我需要在“天”列中填写缺少的天: id month day trans 0 0 8 1 9 1 0 8 2 5 2 0 8 3 10 3 0 8 4 6 4 0 8 6 4 5 0 8 8 4 我正在寻找输出: id month day trans 0 0 8 1 9 1 0 8

我需要在“天”列中填写缺少的天:

    id  month   day trans
0   0     8     1   9
1   0     8     2   5
2   0     8     3   10
3   0     8     4   6
4   0     8     6   4
5   0     8     8   4
我正在寻找输出:

    id  month   day trans
0   0     8     1   9
1   0     8     2   5
2   0     8     3   10
3   0     8     4   6
4   0     8     5   NAN
5   0     8     6   4
6   0     8     7   NAN
7   0     8     8   4

我认为最好的处理方法是构建一个包含输出的所有[month,day]值的熊猫df,然后在[id,month,day]键上合并第一个df。

使用reindex()

在你的评论之后

  mux = pd.MultiIndex.from_product([df['id'].unique(),[1,2,3,4,5,6,7]], names=['id','day'])
df1=df.set_index(['id','day']).reindex(mux).reset_index()   
df1[['month','id']]=df1[['month','id']].ffill()



id  day  month  #trans
0   0    1    8.0     9.0
1   0    2    8.0     5.0
2   0    3    8.0    10.0
3   0    4    8.0     6.0
4   0    5    8.0     NaN
5   0    6    8.0     4.0
6   0    7    8.0     NaN

使用上采样

df['date']=df.apply(λx:datetime(2020年,x['month'],x['day']),axis=1)
df=df.set_索引(“日期”)
#上采样
df_daily=df.resample('D').asfreq().reset_index()
#重新分配月份和日期
df_daily['month']=df_daily.date.dt.month
df_daily['day']=df_daily.date.dt.day
df_daily['id']=df_daily['id'].fillna(method='ffill').astype(int)
每日[日期]

你如何处理
2月
月?在这种情况下,我只处理8月、9月和10月。所有组的天数是否相同,或者可以不同?如果它们不同,下一组中有4天会发生什么?你能稍微修改一下这个例子吗?我得到以下错误:ValueError:无法从重复的轴重新编制索引。在day列中可能有重复的天。如果是这样,解决方案是使用至少两个列来转换不同的类别。在这种情况下,让我们添加
id
mux=pd.MultiIndex.from_product([df['id'].unique(),[1,2,3,4,5,6,7]],names=['id','day'])
df.set_index(['id','day'])。reindex(mux)
是否有帮助,愿意帮助进一步感谢,请投票支持答案,以便人们将来可以自信地使用你的问题和我的答案。请投你一票
  mux = pd.MultiIndex.from_product([df['id'].unique(),[1,2,3,4,5,6,7]], names=['id','day'])
df1=df.set_index(['id','day']).reindex(mux).reset_index()   
df1[['month','id']]=df1[['month','id']].ffill()



id  day  month  #trans
0   0    1    8.0     9.0
1   0    2    8.0     5.0
2   0    3    8.0    10.0
3   0    4    8.0     6.0
4   0    5    8.0     NaN
5   0    6    8.0     4.0
6   0    7    8.0     NaN