我有一个以下结构的数据框(将其显示为逗号分隔值):
day date hour cnt
Friday 9/15/2017 0 3
Friday 9/15/2017 1 5
Friday 9/15/2017 2 8
Friday 9/15/2017 3 6
...........................
Friday 9/15/2017 10
...........................
Saturday 9/16/2017 21 5
Saturday 9/16/2017 22 4
某些日期值包含每小时(0-23)的数据。
但是,某些日期值可能会丢失小时数。在该示例中,对于9/15/2017数据,没有从9到13的小时值的记录。对于所有这些丢失的记录,我需要添加具有cnt
值(最后一列)的新记录。零。
我如何在Python中实现这一目标?
答案 0 :(得分:0)
如果您使用pandas.DataFrame
,则可以使用fillna()方法:
DataFrame['cnt'].fillna(value=0, axis=1)
考虑data
:
one two three
a NaN 1.2 -0.355322
c NaN 3.3 0.983801
e 0.01 4 -0.712964
您可以使用NaN
填充fillna()
:
data.fillna(0)
one two three
a 0 1.2 -0.355322
c 0 3.3 0.983801
e 0.01 4 -0.712964
答案 1 :(得分:0)
您可以生成DatetimeIndex
并使用resample
方法:
#suppose your dataframe is named df:
idx = pd.DatetimeIndex(pd.to_datetime(df['date']).add(pd.to_timedelta(df['hour'], unit='h')))
df.index = idx
df_filled = df[['cnt']].resample('1H').sum().fillna(0).astype(int)
df_filled['day'] = df_filled.index.strftime('%A')
df_filled['date'] = df_filled.index.strftime('%-m/%-d/%Y')
df_filled['hour'] = df_filled.index.strftime('%-H')
或者您可以使用枢轴和非透视技巧:
df_filled = df.pivot(values='cnt',index='date',columns='hour').fillna(0).unstack()
df_filled = df_filled.reset_index().sort_values(by=['date','hour'])