Я пытаюсь создать список кортежей с последовательными датами начала и окончания, в которых все столбцы имеют значения NaN.
В следующем примере мой результат должен выглядеть примерно так:
missing_dates = [('2018-10-10 20:00:00', '2018-10-10 22:00:00'),
('2018-10-11 02:00:00', '2018-10-11 03:00:00 ')]
Если есть изолированный NaN, значение должно быть повторено в кортеже.
Пример словаря с таблицей для визуализации.
dicts = [
{'datetime': '2018-10-10 18:00:00', 'variable1': 20, 'variable2': 30},
{'datetime': '2018-10-10 19:00:00', 'variable1': 20, 'variable2': 30},
{'datetime': '2018-10-10 19:00:00', 'variable1': 20, 'variable2': 30},
{'datetime': '2018-10-10 19:00:00', 'variable1': 20, 'variable2': 30},
{'datetime': '2018-10-10 20:00:00', 'variable1': np.nan, 'variable2': np.nan},
{'datetime': '2018-10-10 21:00:00', 'variable1': np.nan, 'variable2': np.nan},
{'datetime': '2018-10-10 22:00:00', 'variable1': np.nan, 'variable2': np.nan},
{'datetime': '2018-10-10 23:00:00', 'variable1': 20, 'variable2': 30},
{'datetime': '2018-10-10 23:00:00', 'variable1': 20, 'variable2': 30},
{'datetime': '2018-10-11 00:00:00', 'variable1': 20, 'variable2': 30},
{'datetime': '2018-10-11 01:00:00', 'variable1': np.nan, 'variable2': 30},
{'datetime': '2018-10-11 02:00:00', 'variable1': np.nan, 'variable2': np.nan},
{'datetime': '2018-10-11 03:00:00', 'variable1': np.nan, 'variable2': np.nan}]
Представление таблицы:
----------------------+-----------+-----------+
| datetime | variable1 | variable2 |
+---------------------+-----------+-----------+
| 2018-10-10 18:00:00 | 20.0 | 30.0 |
| 2018-10-10 19:00:00 | 20.0 | 30.0 |
| 2018-10-10 19:00:00 | 20.0 | 30.0 |
| 2018-10-10 19:00:00 | 20.0 | 30.0 |
| 2018-10-10 20:00:00 | NaN | NaN |
| 2018-10-10 21:00:00 | NaN | NaN |
| 2018-10-10 22:00:00 | NaN | NaN |
| 2018-10-10 23:00:00 | 20.0 | 30.0 |
| 2018-10-10 23:00:00 | 20.0 | 30.0 |
| 2018-10-11 00:00:00 | 20.0 | 30.0 |
| 2018-10-11 01:00:00 | NaN | 30.0 |
| 2018-10-11 02:00:00 | NaN | NaN |
| 2018-10-11 03:00:00 | NaN | NaN |
+---------------------+-----------+-----------+
Что я сделал:
df = pd.DataFrame(example_dict)
s = dframe.set_index('datetime').isnull().all(axis=1)
df['new_col'] = s.values
dframe.datetime = pd.to_datetime(dframe.datetime)
new_df = dframe.loc[dframe['new_col'] == True]
new_df['delta'] = (new_df['datetime'] - new_df['datetime'].shift(1))
У меня есть хороший кадр данных с дельтой, но я немного растерялся.