除了使用np.where,如何在python中添加具有多个字符串包含条件的新列?

除了使用np.where,如何在python中添加具有多个字符串包含条件的新列?,python,pandas,loops,numpy,dataframe,Python,Pandas,Loops,Numpy,Dataframe,我试图通过使用str.contains()和np.where()函数为多个字符串提供包含条件来添加一个新列。通过这种方式,我可以得到我想要的最终结果 但是,代码非常冗长。使用pandas函数重新实现这个功能有什么好方法吗 df5['new_column'] = np.where(df5['sr_description'].str.contains('gross to net', case=False).fillna(False),1, np.where(df5['sr_descripti

我试图通过使用
str.contains()
np.where()
函数为多个字符串提供包含条件来添加一个新列。通过这种方式,我可以得到我想要的最终结果

但是,代码非常冗长。使用pandas函数重新实现这个功能有什么好方法吗

df5['new_column'] = np.where(df5['sr_description'].str.contains('gross to net', case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('gross up', case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('net to gross',case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('gross-to-net',case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('gross-up',case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('net-to-gross',case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('gross 2 net',case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('net 2 gross',case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('gross net',case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('net gross',case=False).fillna(False),1,
    np.where(df5['sr_description'].str.contains('memo code',case=False).fillna(False),1,0)))))))))))
这个输出将是,

如果这些字符串包含在“sr_description”中,则将
1
,否则
0
添加到
new_列

可能将多个字符串条件存储在一个列表中,然后读取并应用于函数

编辑:

样本数据:

sr_description                  new_column
something with gross up.           1
without those words.               0
or with Net to gross               1
if not then we give a '0'          0

这是我想到的

代码:

              sr_description  contains_str
0   something with gross up.          True
1       without those words.         False
2                        NaN         False
3       or with Net to gross          True
4  if not then we give a "0"         False
重新导入
作为pd进口熊猫
将numpy作为np导入
#要检查的字符串的列表
勾选_strs=[‘毛额对净额’、‘毛额对净额’、‘毛额对净额’、‘毛额对净额’、‘毛额对净额’、‘毛额2净额’,
“净2毛额”、“净毛额”、“净毛额”、“备忘录代码”]
#从re.escape()文档中:在模式中转义特殊字符。
#如果要匹配可能包含正则表达式元字符的任意文字字符串,这将非常有用。
check_strs_esc=[check_strs中当前值的重新转义(当前值)]
#将所有转义字符串作为单个正则表达式联接
勾选“|”。加入(勾选)
test_col_1=[“某个词有加总”,“没有那些词”,“np.NaN”,“或净到加总”,“如果没有加总,则我们给出一个“0”]
df_1=pd.DataFrame(data=test_col_1,columns=['sr_description']))
df_1['contains_str']=df_1['sr_description'].str.contains(检查字符串,大小写=False,na=False)
打印(df_1)
结果:

              sr_description  contains_str
0   something with gross up.          True
1       without those words.         False
2                        NaN         False
3       or with Net to gross          True
4  if not then we give a "0"         False
注意,
numpy
不是解决方案运行所必需的,我只是用它来测试一个
NaN


如果有什么不清楚或您有任何问题,请告诉我!:)

这是我想到的

代码:

              sr_description  contains_str
0   something with gross up.          True
1       without those words.         False
2                        NaN         False
3       or with Net to gross          True
4  if not then we give a "0"         False
重新导入
作为pd进口熊猫
将numpy作为np导入
#要检查的字符串的列表
勾选_strs=[‘毛额对净额’、‘毛额对净额’、‘毛额对净额’、‘毛额对净额’、‘毛额对净额’、‘毛额2净额’,
“净2毛额”、“净毛额”、“净毛额”、“备忘录代码”]
#从re.escape()文档中:在模式中转义特殊字符。
#如果要匹配可能包含正则表达式元字符的任意文字字符串,这将非常有用。
check_strs_esc=[check_strs中当前值的重新转义(当前值)]
#将所有转义字符串作为单个正则表达式联接
勾选“|”。加入(勾选)
test_col_1=[“某个词有加总”,“没有那些词”,“np.NaN”,“或净到加总”,“如果没有加总,则我们给出一个“0”]
df_1=pd.DataFrame(data=test_col_1,columns=['sr_description']))
df_1['contains_str']=df_1['sr_description'].str.contains(检查字符串,大小写=False,na=False)
打印(df_1)
结果:

              sr_description  contains_str
0   something with gross up.          True
1       without those words.         False
2                        NaN         False
3       or with Net to gross          True
4  if not then we give a "0"         False
注意,
numpy
不是解决方案运行所必需的,我只是用它来测试一个
NaN


如果有什么不清楚或您有任何问题,请告诉我!:)

您可以使用一个正则表达式,将所有的事例与“or”运算符匹配,这样您就可以看到
numpy。只要有“gross”是1,就选择
?使用布尔值可能比使用“0”和“1”更好。我想我知道如何解决这个问题,明天我会试着发布一个答案。你能解释一下代码的作用吗?你可以使用一个正则表达式,将所有的情况都与“或”运算符匹配,这样你就可以看到
numpy。只要有“gross”是1,就选择
。使用布尔值可能比使用“0”和“1”更好。我想我知道如何解决这个问题,明天我会发布一个答案。你能解释一下代码的作用吗?