【问题标题】:Python Pandas replace values in one column based on conditional in multiple other columns [duplicate]Python Pandas根据多个其他列中的条件替换一列中的值[重复]
【发布时间】:2018-09-15 13:20:13
【问题描述】:

使用数据框 df:

Product_ID | Category_A   | Category _B
1232             0              0 
1343             Unknown        X
2543             Nan            0 
2549             Y              Y
0349             X              X
8533             Y              X

我想创建一个新列 Category_Final,其规则如下:

  • 如果 Category_A 为 0、Unknown 或 Nan,Category_Final 应为“Unknown”
  • 如果 Category_A 与 Category_B 相同,Category_Final 应为 0
  • 如果 Category_A 与 Category_B 不同,Category_Final 应该是 X

预期输出:

Product_ID | Category_A   | Category _B | Category_Final
1232             0              0            Unknown
1343             Unknown        X            Unknown
2543             Nan            0            Unknown
2549             Y              Y            0
0349             X              X            0
8533             Y              X            X

我设法获得了 0 和 X 的逻辑,但我不知道如何包含未知逻辑。

df['Category_Final'] = np.where(df['Category_A'] != df['Category_B'], 'X', '0')

谢谢!

【问题讨论】:

标签: python pandas if-statement conditional nan


【解决方案1】:

在当前行之后,试试这个:

mask = ((df.Category_A.isnull()) | 
        (df.Category_A == 'Unknown') | 
        (df.Category_A == 0))
df.loc[mask, 'Category_Final'] = 'Unknown'

【讨论】:

    【解决方案2】:

    你可以使用嵌套的np.where

    df['Category_Final'] = np.where((df['Category_A'].isnull() | \
                                                  (df['Category_A'] == 'Unknown') | (df['Category_A'] == '0')),\
                                                  'Unknown', np.where(df['Category_A'] == \
                                                                      df['Category_B'], 0, 'X'))
    

    输出

    Product_ID  Category_A  Category_B  Category_Final
    0   1232    0            0            Unknown
    1   1343    Unknown      X            Unknown
    2   2543    NaN          0            Unknown
    3   2549    Y            Y              0
    4   349     X            X              0
    5   8533    Y            X              X
    

    【讨论】:

    • 完美!我知道我很接近了,谢谢!
    【解决方案3】:
    df['Category_Final'] = (
        df.apply(lambda _: "0", axis=1)
        .where(df['Category_A'] == df['Category_B'], "X")
        .where(~df['Category_A'].isin(["0", "Unknown", np.NaN]), "Unknown")
    )
    

    【讨论】:

    • 仅供参考的代码答案不被接受
    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多