在 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()