python - python在数据框中每天屏蔽
问题描述
我必须对数据框进行每日总和,但前提是至少 70% 的每日数据不是 NaN。如果是,那么这一天就不能被考虑在内。有没有办法制作这样的面具?我的数据框是超过 17 年的每小时数据。
我的数据是这样的:
clear skies all skies Lab
2015-02-26 13:00:00 597.5259 376.1830 307.62
2015-02-26 14:00:00 461.2014 244.0453 199.94
2015-02-26 15:00:00 283.9003 166.5772 107.84
2015-02-26 16:00:00 93.5099 50.7761 23.27
2015-02-26 17:00:00 1.1559 0.2784 0.91
... ... ...
2015-12-05 07:00:00 95.0285 29.1006 45.23
2015-12-05 08:00:00 241.8822 120.1049 113.41
2015-12-05 09:00:00 363.8040 196.0568 244.78
2015-12-05 10:00:00 438.2264 274.3733 461.28
2015-12-05 11:00:00 456.3396 330.6650 447.15
如果我进行分组和汇总,则无法知道是否在任何一天都缺少数据,并且某些日子的总和会降低,因此会降低我的月均值
解决方案
正如评论中所说,使用groupby
按日期对数据进行分组,然后编写适当的选择。这是一个示例,它将所有天(假设常规数据点,每天 24 个)与少于 50% 的nan
条目相加:
import pandas as pd
import numpy as np
# create a date range
date_rng = pd.date_range(start='1/1/2018', end='1/1/2021', freq='H')
# create random data
df = pd.DataFrame({"data":np.random.randint(0,100,size=(len(date_rng)))}, index = date_rng)
# set some values to nan
df["data"][df["data"] > 50] = np.nan
# looks like this
df.head(20)
# sum everything where less than 50% are nan
df.groupby(df.index.date).sum()[df.isna().groupby(df.index.date).sum() < 12]
示例输出:
data
2018-01-01 NaN
2018-01-02 NaN
2018-01-03 487.0
2018-01-04 NaN
2018-01-05 421.0
... ...
2020-12-28 NaN
2020-12-29 NaN
2020-12-30 NaN
2020-12-31 392.0
2021-01-01 0.0
推荐阅读
- swiftui - 为什么 LazyHStack 占据全高但 HStack 在 SwiftUI 中没有?
- laravel - Laravel 使用日期范围列过滤日期范围
- scala - 如何在 spark startsWith() 函数中提供多个条件?
- php - 我想更改输入背景的 css 样式,取决于 mysql php (form) request IF/ELSE
- java - 如何在不“退出”导致打印输出的情况下停止执行此循环?
- ios - 全新的 React Native CLI (2.0.1) 项目在构建 (iOS) 时失败
- arrays - 验证数组中是否存在元素的函数
- java - Parcel android.os.Parcel@72a6e36:在偏移量 500 处解组未知类型代码 2131365270
- c++ - 为 ESP32 / ESP8266 EEPROM 使用闪存向量
- laravel - 防止在 Livewire 中像闪烁一样预打开模态