【发布时间】:2019-01-08 05:35:25
【问题描述】:
我有一个名为 df 的数据框,看起来与此类似(除了“mat_deliv”列的数量上升到 mat_deliv_8 并且有数百个客户端 - 我在这里对其进行了简化)。
Client_ID mat_deliv_1 mat_deliv_2 mat_deliv_3 mat_deliv_4
C1019876 xxx,yyy,zzz aaa,bbb,xxx ccc ddd
C1018765 yyy,zzz xxx bbb None
C1017654 yyy,xxx aaa,bbb ccc ddd
C1016543 aaa,bbb ccc None None
C1019876 yyy None None None
我想创建一个名为xxx_deliv 的新列,其中包含两个值0 和1。如果mat_deliv_1、mat_deliv_2、mat_deliv_3 或mat_deliv_4 中的任何一个包含xxx,我想将xxx_deliv 设置为等于1,如果它们不包含0。
所以,我想添加一个列,以 df 为例,如下所示:
Client_ID mat_deliv_1 mat_deliv_2 mat_deliv_3 mat_deliv_4 xxx_deliv
C1019876 xxx,yyy,zzz aaa,bbb,xxx ccc ddd 1
C1018765 yyy,zzz xxx bbb None 1
C1017654 yyy,xxx aaa,bbb ccc ddd 1
C1016543 aaa,bbb ccc None None 0
C1019876 yyy None None None 0
我知道以下代码执行所需的任务:
df['xxx_deliv'] = 0
df.loc[(df.Mat_deliv_1.str.contains("xxx", na=False)) |
(df.Mat_deliv_2.str.contains("xxx", na=False)) |
(df.Mat_deliv_3.str.contains("xxx", na=False)) |
(df.Mat_deliv_4.str.contains("xxx", na=False)),
'xxx_deliv'] = 1
但我希望能够做到这一点,而无需遍历每一列 - 我需要能够一次搜索多个列。
【问题讨论】: