pandas - 日期列移动并且不再可调用
问题描述
我正在使用 pandas groupby 按其 pm25 值对重复日期进行分组以获得一个平均值。但是,当我使用 groupby 函数时,我的数据框的结构发生了变化,我不能再调用“日期”列。
使用 groupby 也改变了我的数据结构:不是按 1/1/19、1/2/19 排序,而是按 1/1/19、1/10/19、1/11/19 排序。
这是我当前的代码:
在使用 df.groupby 之前,我的 df 看起来像:
我使用 groupby:
df.groupby('Date').mean('pm25')
print(df)
之后,我不能再调用“日期”列或对该列进行排序
print(df['Date'])
只返回
KeyError: 'Date'
请帮忙,或者请让我知道我还能提供什么。
解决方案
使用 groupby 也改变了我的数据结构:不是按 1/1/19、1/2/19 排序,而是按 1/1/19、1/10/19、1/11/19 排序。
这是因为您的Date
列类型是字符串而不是日期时间。在字符串比较中, 的第三个字符小于 的第三1
个字符。如果你想保持原来的顺序,你可以到以下1/10/19
2
1/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
列之后,返回的数据框将使用Date
groupby 之后的列作为索引来表示每个组。
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')
,上面返回的数据框表示组的平均值pm25
为01/01/19
8.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')
推荐阅读
- javascript - 为什么这段代码在我没有告诉它的情况下修改了我的数组?
- webrtc - 在 WAN 上使用 MR-WebRTC 的 Hololens2 和 PC 之间的网络非常慢
- numpy - Numpy 最大值法的使用
- html - 如何在固定高度的情况下将图像拉伸到全宽
- ef-core-3.1 - 使用 ef core 3.1 翻译创建的用户名的最佳方法是什么
- node.js - Firebase 触发函数 onUpdateField (?)
- bash - `kubectl wait` 可以用于部署生成的秘密吗?如果没有,bash中的任何替代方法?
- go - Codewalk之Golang并发代码回顾
- google-sheets - 谷歌表:生成增量编号
- vue.js - vue-pdf,如何让pdf渲染pdf的原始宽度