防止在熊猫方法链接过程中过早评估操作

时间:2018-12-20 09:11:24

标签: python pandas dataframe

假设我有以下pandas DataFrame

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

我想用列b中的值来填充列a中的值。

我绝对可以做到

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 :(得分:1)

您可以将assign与回调和fillna一起使用。

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

   a  b
0  1  1

哪个返回整个DataFrame的副本,直到在方法链中的那个点才进行评估,并且比使用pipe更为简洁。