Pandas прямое и обратное заполнение по различным индексам - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть следующий фрейм данных df:

             length       timestamp       width
name                                          
testschip-1     NaN 2019-08-01 00:00:00    NaN
testschip-1     NaN 2019-08-01 00:00:09    NaN
testschip-1     2   2019-08-01 00:00:20    NaN
testschip-1     2   2019-08-01 00:00:27    NaN
testschip-1     NaN 2019-08-01 00:00:38    1
testschip-2     4   2019-08-01 00:00:39    2
testschip-2     4   2019-08-01 00:00:57    NaN
testschip-2     4   2019-08-01 00:00:58    NaN
testschip-2     NaN 2019-08-01 00:01:17    NaN
testschip-3     NaN 2019-08-01 00:02:27    NaN
testschip-3     NaN 2019-08-01 00:03:47    NaN

Сначала я хочу удалить строку "testschip-" из индекса "name", чтобы получить целые числа только по индексам. Во-вторых, для каждого уникального индекса я хочу применить прямое или обратное заполнение (что бы ни требовалось, чтобы не было NaN) для обоих столбцов «длина» и «ширина». Каждый уникальный индекс имеет одинаковые «длина» и «ширина». На "testschip-3" я не хочу применять обратную или прямую заливку. Если я выполню обратную проверку «testschip-1» (которая необходима для установки первых двух индексов на два «2»), я получу нежелательное «4» для последней строки индекса «testschip-1»). Я не могу судить заранее, нужно ли мне применять обратное или прямое заполнение заранее, так как у меня есть 4 миллиона строк данных для начала.

1 Ответ

1 голос
/ 20 февраля 2020

Использование:

df.index = df.index.str.lstrip('testschip-').astype(int)
#alternative
#df.index = df.index.str[10:].astype(int)
#df.index = df.index.str.split('-').str[-1].astype(int)
df.groupby(level = 0).apply(lambda x: x.bfill().ffill())

Выход

      length           timestamp  width
name                                   
1        2.0 2019-08-01 00:00:00    1.0
1        2.0 2019-08-01 00:00:09    1.0
1        2.0 2019-08-01 00:00:20    1.0
1        2.0 2019-08-01 00:00:27    1.0
1        2.0 2019-08-01 00:00:38    1.0
2        4.0 2019-08-01 00:00:39    2.0
2        4.0 2019-08-01 00:00:57    2.0
2        4.0 2019-08-01 00:00:58    2.0
2        4.0 2019-08-01 00:01:17    2.0
3        NaN 2019-08-01 00:02:27    NaN
3        NaN 2019-08-01 00:03:47    NaN
...