【发布时间】:2018-09-20 14:36:43
【问题描述】:
我想根据现有列的值为列分配值。此代码有效,但我想在原地执行它,也许使用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
【问题讨论】:
标签: python pandas ternary-operator