Pandas пересчитать по дате и выбрать 2-е наименьшее значение - PullRequest
3 голосов
/ 09 января 2020

У меня есть фрейм данных, похожий на

2020-01-07 09:00:00,22,228
2020-01-07 10:00:00,22,228
2020-01-07 11:00:00,22,228
2020-01-07 12:00:00,22,228
2020-01-07 13:00:00,22,228
2020-01-07 14:00:00,22,228
2020-01-07 15:00:00,21,228
2020-01-07 16:00:00,22,228
2020-01-08 09:00:00,43,45
2020-01-08 10:00:00,44,45
2020-01-08 11:00:00,41,45
2020-01-08 12:00:00,47,43

Я хотел бы получить 2-е наименьшее значение каждого столбца по данным. Я знаю, что могу получить минимум, выполнив df = df.resample('D', on='DateTime').min(), и я знаю, что nsmallest(n=2) и last могут объединиться, чтобы получить то, что мне нужно.

Как использовать resample вместе с nsmallest

1 Ответ

2 голосов
/ 09 января 2020

Используйте Resampler.aggregate с пользовательской функцией для возврата некоторого значения, например, NaN, если не существует второго наименьшего значения:

def f(x):
    v= x.nsmallest(2)
    try:
        return v.iat[1]
    except:
        return np.nan

df = df.resample('D', on='DateTime').agg(f)

Если хотите второе уникальное наименьшее значение:

def f(x):
    v = np.sort(np.unique(x))
    try:
        return v[1]
    except:
        return np.nan
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...