【问题标题】:If-else conditional assignment in pandas熊猫中的if-else条件赋值
【发布时间】:2018-09-20 14:36:43
【问题描述】:

我想根据现有列的值为列分配值。此代码有效,但我想在原地执行它,也许使用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

【问题讨论】:

    标签: python pandas ternary-operator


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • original.assign(new=lambda x: np.where(x["col"].isin(["b", "x"]), 1, 99)) 正是我想要的。谢谢。
    猜你喜欢
    • 2012-10-03
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多