python - PANDAS:按 ID 计算高于阈值的行数
问题描述
我目前无法确定一种方法来计算记录数,即按包含标识符的列,其中数字高于阈值,每天。
即:对于每一天,在位置 1,有多少行/记录中的“温度”高于值 20?如果一天不包含大于 20 的值,则结果应为 0。结果应位于新数据框中。
DateTime 作为 Pandas datetime64[ns] 对象存在。
我有大约 1000 万行要处理,并且预计这将是一个常规查询 - 所以不介意坚持使用 pandas 矢量化方法(即 lambda 可能不是一个好的选择)。
示例数据:此处为 csv。
Name: df
+----------+-----------------+------+
| Location | DateTime | Temp |
+----------+-----------------+------+
| 0 | 3/03/2021 7:00 | 5 |
| 0 | 3/03/2021 8:00 | 10 |
| 0 | 3/03/2021 9:00 | 15 |
| 0 | 3/03/2021 10:00 | 10 |
| 0 | 3/03/2021 11:00 | 15 |
| 0 | 3/03/2021 12:00 | 20 |
| 0 | 3/03/2021 13:00 | 20 |
| 0 | 4/03/2021 8:00 | 25 |
| 0 | 4/03/2021 10:00 | 15 |
| 0 | 4/03/2021 12:00 | 10 |
| 0 | 4/03/2021 13:00 | 10 |
| 0 | 4/03/2021 15:00 | 5 |
| 0 | 4/03/2021 20:00 | 5 |
| 1 | 4/03/2021 7:00 | 5 |
| 1 | 4/03/2021 8:00 | 5 |
| 1 | 4/03/2021 9:00 | 10 |
| 1 | 4/03/2021 10:00 | 15 |
| 1 | 4/03/2021 12:00 | 15 |
| 1 | 4/03/2021 14:00 | 10 |
| 1 | 5/03/2021 15:00 | 30 |
| 1 | 5/03/2021 17:00 | 30 |
| 1 | 5/03/2021 18:00 | 20 |
| 1 | 5/03/2021 20:00 | 15 |
| 1 | 5/03/2021 21:00 | 5 |
| 1 | 5/03/2021 23:00 | 5 |
+----------+-----------------+------+
样本输出
Name: df2
+----------+-----------+-------+
| Location | Date | Count |
+----------+-----------+-------+
| 0 | 3/03/2021 | 2 |
| 0 | 4/03/2021 | 1 |
| 1 | 4/03/2021 | 0 |
| 1 | 5/03/2021 | 3 |
+----------+-----------+-------+
想法:如果我使用 .loc() ,我可能会丢失那些温度不超过 20 的位置。
如果我使用 .resample() 我不相信我可以设置 Temps 高于 20 的阈值,但我可以使用 Location 列按天重新采样。
目前我正在使用它,但结果出现问题,出现异常计数。
import pandas as pd
df1 = pd.read_csv(r'c:\Temp\GistExample.csv') #My dataframe is constructed differently. This may need to be cast to DateTime
#Find number of hours per day above 20
df2 = df1[['Location', 'DateTime', 'Temp']].copy()
df2['Date'] = pd.to_datetime(df2['DateTime']).dt.date
df2['IsItAbove20'] = 0
df2.loc[(df2['Temp'] >= 20), 'IsItabove20'] = 1
TimeAbove = df2.groupby(['Location', 'Date'])['Temp'].sum().reset_index()
解决方案
推荐阅读
- python - python中如何通过对特征值进行排序来快速改变对应的特征向量?
- c# - Xamarin 连通性变化变换函数
- angular - 如何从 url 获取令牌的值并将其分配给输入值
- amazon-dynamodb - 为什么 DynamoDB 不支持索引/表重命名?
- ionic-framework - 如何在 Ionic 中将 base64 字符串转换为 JPG 或 Png
- mysql - MYSQL查询每周获取新客户
- java - 使用java查找数组中的第二大值?
- python - 如何更改模型中日期字段的格式?
- wpf - 获取模板中内容的实际大小以绘制不规则形状的按钮
- bash - 如何将应用程序链接到 usr/local/bin,以便可以在终端中全局调用它。苹果电脑