首页 > 解决方案 > 日期列移动并且不再可调用

问题描述

我正在使用 pandas groupby 按其 pm25 值对重复日期进行分组以获得一个平均值。但是,当我使用 groupby 函数时,我的数据框的结构发生了变化,我不能再调用“日期”列。

使用 groupby 也改变了我的数据结构:不是按 1/1/19、1/2/19 排序,而是按 1/1/19、1/10/19、1/11/19 排序。

这是我当前的代码:

在使用 df.groupby 之前,我的 df 看起来像:

df 在 groupy 之前

我使用 groupby:

df.groupby('Date').mean('pm25')
print(df)

groupby后的df

之后,我不能再调用“日期”列或对该列进行排序

print(df['Date'])

只返回

KeyError: 'Date'

请帮忙,或者请让我知道我还能提供什么。

标签: pandasdatesorting

解决方案


使用 groupby 也改变了我的数据结构:不是按 1/1/19、1/2/19 排序,而是按 1/1/19、1/10/19、1/11/19 排序。

这是因为您的Date列类型是字符串而不是日期时间。在字符串比较中, 的第三个字符小于 的第三1个字符。如果你想保持原来的顺序,你可以到以下1/10/1921/2/19

df['Date'] = pd.to_datetime(df['Date'])          # Convert Date column to datetime type
df['Date'] = df['Date'].dt.strftime('%m/%d/%y')  # Convert datetime to other formats (but the dtype of column will be string)

之后,我不能再调用“日期”列或对该列进行排序

这是因为在 groupbyDate列之后,返回的数据框将使用Dategroupby 之后的列作为索引来表示每个组。

          pm25
Date
01/01/19  8.50
01/02/19  9.20
01/03/19  7.90
01/04/19  8.90
01/05/19  6.00

完成后df.groupby('Date').mean('pm25'),上面返回的数据框表示组的平均值pm2501/01/198.50,等等。

如果Date要从索引中检索列,可以reset_index()在 groupby 之后,

df.groupby('Date').mean('pm25').reset_index()

这使

       Date  pm25
0  01/01/19  8.50
1  01/02/19  9.20
2  01/03/19  7.90
3  01/04/19  8.90
4  01/05/19  6.00
5  01/06/19  6.75
6  01/11/19  8.50
7  01/12/19  9.20
8  01/21/19  9.20

或者将pandas.DataFrame.groupby()as_index的参数指定为False

df.groupby('Date', as_index=False).mean('pm25')

推荐阅读