在 DateTIme 上执行 groupby 后创建索引
Creating an index after performing groupby on DateTIme
我有以下格式的数据(见下文)
我接下来执行重铸、分组和平均(见代码)以降低数据维度。
df_mod=pd.read_csv('wet_bulb_hr.csv')
#Mod Date
df_mod['wbt_date'] = pd.to_datetime(df_mod['wbt_date'])
#Mod Time
df_mod['wbt_time'] = df_mod['wbt_time'].astype('int')
df_mod['wbt_date'] = df_mod['wbt_date'] + \
pd.to_timedelta(df_mod['wbt_time']-1, unit='h')
df_mod['wet_bulb_temperature'] = \
df_mod['wet_bulb_temperature'].astype('float')
df = df_mod
df = df.drop(['wbt_time','_id'], axis = 1)
#df_novel = df.mean()
df = df.groupby([df.wbt_date.dt.year,df.wbt_date.dt.month]).mean()
写入输出文件后,我得到如下所示的输出。
进一步调查,我可以理解为什么。我所有的处理都生成了形状为 1 的数据框,但我真正需要的是还要导出 2 wbt_date 列。由于 groupby 函数
,这似乎没有发生
我的问题:如何生成索引并将 groupby wbt_date 列作为新的单列,以便输出为:
试试这个,
# rename exisiting index & on reset will get added as new column.
df.index.rename("wbt_year", inplace=True)
df.reset_index(inplace=True)
df['month'] = df['wbt_year'].astype(str) + "-" + df['wbt_date'].astype(str)
输出,
>>> df['month']
0 2019-0
1 2018-1
2 2017-2
您可以通过列表理解将 MultiIndex 展平为 YYYY-MM
中的索引:
df = df.groupby([df.wbt_date.dt.year,df.wbt_date.dt.month]).mean()
df.index = [f'{y}-{m}' for y, m in df.index]
df = df.rename_axis('date').reset_index()
或使用月份 Series.dt.to_period
:
df = df.groupby([df.wbt_date.dt.to_period('m')).mean().reset_index()
我有以下格式的数据(见下文)
我接下来执行重铸、分组和平均(见代码)以降低数据维度。
df_mod=pd.read_csv('wet_bulb_hr.csv')
#Mod Date
df_mod['wbt_date'] = pd.to_datetime(df_mod['wbt_date'])
#Mod Time
df_mod['wbt_time'] = df_mod['wbt_time'].astype('int')
df_mod['wbt_date'] = df_mod['wbt_date'] + \
pd.to_timedelta(df_mod['wbt_time']-1, unit='h')
df_mod['wet_bulb_temperature'] = \
df_mod['wet_bulb_temperature'].astype('float')
df = df_mod
df = df.drop(['wbt_time','_id'], axis = 1)
#df_novel = df.mean()
df = df.groupby([df.wbt_date.dt.year,df.wbt_date.dt.month]).mean()
写入输出文件后,我得到如下所示的输出。
进一步调查,我可以理解为什么。我所有的处理都生成了形状为 1 的数据框,但我真正需要的是还要导出 2 wbt_date 列。由于 groupby 函数
,这似乎没有发生我的问题:如何生成索引并将 groupby wbt_date 列作为新的单列,以便输出为:
试试这个,
# rename exisiting index & on reset will get added as new column.
df.index.rename("wbt_year", inplace=True)
df.reset_index(inplace=True)
df['month'] = df['wbt_year'].astype(str) + "-" + df['wbt_date'].astype(str)
输出,
>>> df['month']
0 2019-0
1 2018-1
2 2017-2
您可以通过列表理解将 MultiIndex 展平为 YYYY-MM
中的索引:
df = df.groupby([df.wbt_date.dt.year,df.wbt_date.dt.month]).mean()
df.index = [f'{y}-{m}' for y, m in df.index]
df = df.rename_axis('date').reset_index()
或使用月份 Series.dt.to_period
:
df = df.groupby([df.wbt_date.dt.to_period('m')).mean().reset_index()