Предотвращение преждевременной оценки операций во время цепочки методов панд - PullRequest
0 голосов
/ 20 декабря 2018

допустим, у меня есть следующее pandas DataFrame

df = pd.DataFrame(data=dict(a=[1], b=[None]))

, и я хочу заполнить отсутствующие значения столбца b значениями из столбца a.

Iможет определенно сделать

df = df.fillna(value={"b": df["a"]})

или использовать inplace=True.

Теперь, если я хочу использовать цепочку методов.Поскольку у меня есть другие методы, которые изменяют / модифицируют a и b, я не хочу, чтобы fillna оценивалась до тех пор, пока она не окажется в той точке цепочки методов.

Мне удалось использовать pipe с обратным вызовомчерез

df = df.pipe(lambda df: df.fillna(value={"b": df["a"]}))

Это работает, но есть ли лучший способ сделать это?Выше приведен минимальный пример, цепочка, требующая больше шагов в реальном случае.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 20 декабря 2018

Вы можете использовать assign с обратным вызовом и fillna.

df.assign(b=lambda df: df['b'].fillna(df['a']))

   a  b
0  1  1

, которая возвращает копию всего DataFrame, неоценивается до этой точки в цепочке методов и является более кратким, чем использование pipe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...