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