pandas 中的 If-else 条件赋值
If-else conditional assignment in pandas
我想根据现有列的值给列赋值。这段代码有效,但我想不就地执行它,也许使用 assign
或 apply
。
如果这可以在一个步骤中完成,它也可以避免下面发生的从 int
到 float
的隐式转换。
我已经包含了我使用 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
我想根据现有列的值给列赋值。这段代码有效,但我想不就地执行它,也许使用 assign
或 apply
。
如果这可以在一个步骤中完成,它也可以避免下面发生的从 int
到 float
的隐式转换。
我已经包含了我使用 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