Pandas повторная выборка заполнения NaN - PullRequest
0 голосов
/ 06 августа 2020

У меня есть этот df:

            Timestamp        List     Power    Energy     Status
0 2020-01-01 01:05:50   [5, 5, 5]      7000     15000     online
1 2020-01-01 01:06:20   [6, 6, 6]      7500     16000     online
2 2020-01-01 01:08:30   [0, 0, 0]         5         0    offline
...

нет, я хочу передискретизировать его. Используйте .resample следующим образом:

df2 = df.set_index('timestamp').resample('min').?

Я хочу, чтобы df за 1 минуту - интервалы. Для каждого интервала я хочу сопоставить строки следующим образом: Список: if status = online: последняя запись интервала else '0'; Мощность: если статус = онлайн: среднее значение интервала else '0'; Энергия: если статус = онлайн: последняя запись интервала else '0; Статус: последний статус интервала;

как мне заполнить значения NaN, которые выводит .resample, если в df нет данных? Например, нет данных для интервала, тогда df должен быть заполнен следующим образом Power = 0; Энергия = 0; status = offline; ...

Пробовал примерно так:

df2 = df.set_index('Timestamp').resample('T').agg({'List':'last',
                                                   'Power':'mean',
                                                   'Energy':'last',
                                                   'Status':'last'})

и получил:

         Timestamp        List                      Power    Energy     Status
0 2020-01-01 01:05   [5, 5, 5]  (average of the interval)     15000     online
1 2020-01-01 01:06   [6, 6, 6]  (average of the interval)     16000     online
2 2020-01-01 01:07         NaN                        NaN       NaN        NaN
3 2020-01-01 01:08   [0, 0, 0]                          5         0    offline

Ожидаемый результат:

         Timestamp        List                      Power    Energy     Status
0 2020-01-01 01:05   [5, 5, 5]  (average of the interval)     15000     online
1 2020-01-01 01:06   [6, 6, 6]  (average of the interval)     16000     online
2 2020-01-01 01:07   [0, 0, 0]                          0         0    offline
3 2020-01-01 01:08   [0, 0, 0]                          5         0    offline

1 Ответ

0 голосов
/ 08 августа 2020

Невозможно передать правило fillna для отдельной обработки каждого столбца NA значения во время .resample (). Agg () , как показано в документации https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.agg.html

В вашем случае даже интерполяция не работает, поэтому попробуйте вручную обработать каждый столбец NA значения

Во-первых, давайте инициализируем ваш образец кадра.

import pandas as pd

data = {"Timestamp":{"0": "2020-01-01 01:05:50",
                     "1": "2020-01-01 01:06:20",
                     "2": "2020-01-01 01:08:30"},
        "List": {"0": [5, 5, 5],
                 "1": [6, 6, 6],
                 "2": [0, 0, 0]},
        "Power": {"0": 7000,
                 "1": 7500,
                 "2": 5},
        "Energy": {"0": 15000,
                   "1": 16000,
                   "2": 0},
        "Status": {"0": "online",
                   "1": "online",
                   "2": "offline"},
       }

df = pd.DataFrame(data)

df['Timestamp'] = pd.to_datetime(df['Timestamp'])

df = df.set_index('Timestamp').resample('T').agg({'List':'last',
                                                   'Power':'mean',
                                                   'Energy':'last',
                                                   'Status':'last'})

Теперь мы можем вручную заменить NA в каждом столбце отдельно

df["List"] = df["List"].fillna("[0, 0, 0]")
df["Status"] = df["Status"].fillna('offline')
df = df.fillna(0)

или более удобным способом dict

values = {
          'List': '[0, 0, 0]',
          'Status': 'offline', 
          'Power': 0, 
          'Energy': 0
}

df = df.fillna(value=values)
Timestamp   List    Power   Energy  Status
0   2020-01-01 01:05:00     [5, 5, 5]   7000.0  15000.0     online
1   2020-01-01 01:06:00     [6, 6, 6]   7500.0  16000.0     online
2   2020-01-01 01:07:00     [0, 0, 0]   0.0     0.0     offline
3   2020-01-01 01:08:00     [0, 0, 0]   5.0     0.0     offline
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...