groupby操作后重置索引

2024-09-28 22:22:15 发布

您现在位置:Python中文网/ 问答频道 /正文

by_month =  df_omsk_last_year.groupby(df_omsk_last_year.index.month, as_index=False).agg({'T': ['mean', 'min', 'max']})
by_month = by_month.reset_index()
by_month = by_month.rename(columns={'mean':'mean__'})
by_month.info()
by_month['mean__']

当然,我有关键错误

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 12 entries, 0 to 11
Data columns (total 4 columns):
(index, )      12 non-null int64
(T, mean__)    12 non-null float64
(T, min)       12 non-null float64
(T, max)       12 non-null float64
dtypes: float64(3), int64(1)
memory usage: 464.0 bytes

我该怎么办?我试过很多方法

索引是datetime,T是float


Tags: columnsdfindexbyminmeanyearnull
1条回答
网友
1楼 · 发布于 2024-09-28 22:22:15

问题是MultiIndex in columns具有相同级别T。您可以通过在groupby之后指定要处理的列来防止它:

df_omsk_last_year = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'T':[7,8,9,4,2,3],

}, index=pd.date_range('2015-01-01', periods=6, freq='10D'))

by_month = (df_omsk_last_year.groupby(df_omsk_last_year.index.month.rename('month'))['T']
                              .agg(['mean', 'min', 'max'])
                              .rename(columns={'mean':'mean__'})
                              .reset_index())
print (by_month)
   month  mean__  min  max
0      1     7.0    4    9
1      2     2.5    2    3

或通过named aggregations

by_month =  (df_omsk_last_year.groupby(df_omsk_last_year.index.month)
                              .agg(mean__=('T', 'mean'),
                                   min__=('T', 'min'),
                                   max__=('T', 'max'))
                              .reset_index())

相关问题 更多 >