Python Pandas根据多个其他列中的条件替换一列中的值[重复]
Posted
技术标签:
【中文标题】Python Pandas根据多个其他列中的条件替换一列中的值[重复]【英文标题】:Python Pandas replace values in one column based on conditional in multiple other columns [duplicate] 【发布时间】: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')
谢谢!
【问题讨论】:
我认为在这些情况下,numpy select 提供了最易读的解决方案:Pandas conditional creation of a series/dataframe column 【参考方案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")
)
【讨论】:
仅供参考的代码答案不被接受以上是关于Python Pandas根据多个其他列中的条件替换一列中的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章