pandas 中的 If-else 条件赋值

If-else conditional assignment in pandas

我想根据现有列的值给列赋值。这段代码有效,但我想不就地执行它,也许使用 assignapply

如果这可以在一个步骤中完成,它也可以避免下面发生的从 intfloat 的隐式转换。

我已经包含了我使用 assign 的尝试,这引发了 ValueError

import pandas as pd

original = pd.DataFrame({'col': ['a', 'b', 'c']})

d = original.copy()
d.loc[d.col.isin(['b', 'x']), 'new'] = 1
d.loc[~d.col.isin(['b', 'x']), 'new'] = 99
d

# :   col   new
# : 0   a  99.0
# : 1   b   1.0
# : 2   c  99.0

# original.assign(new=lambda x: (1 if x.col.isin(['b', 'x']) else 99)) # ValueError

您可以使用numpy.where():

import numpy as np
original["new"] = np.where(original["col"].isin(["b", "x"]), 1, 99)
print(original)
#  col  new
#0   a   99
#1   b    1
#2   c   99