问题
在‘结果’列为满足条件的相应行逐一打标签,运行代码后,每次打完标签后会把前一次的覆盖掉。请问怎样可以同时打不同的标签?
代码
import pandas as pd
import numpy as np
df= pd.DataFrame({'产品': ['产品1', '产品2', '产品3', '产品4'],
'A列': ['收益', '收益好', '差', '收益'],
'B列': ['金融收益', '航司收益', '收益', '收益'],
'C列': [10, 20, 30, 40],
'结果': ['待定','待定','待定','待定']})
list1 = '收益'
list2 = '航司|金融'
###Y1标签:C列的值>=40,且满足“B列包含list1任意内容的同时不包含list2所有内容” 或 “A列包含list1任意内容”:
df['结果'] = df[(df['B列'].str.contains(list1))&(~df['B列'].str.contains(list2))&(df['C列']>=40)]['结果'].replace({'待定':'Y1'})
print(df)
>>>以上打印输出结果:
产品 A列 B列 C列 结果
0 产品1 收益 金融收益 10 NaN
1 产品2 收益好 航司收益 20 NaN
2 产品3 差 收益 30 NaN
3 产品4 收益 收益 40 Y1
###Y2标签:C列的值<40,且满足“B列包含list1任意内容的同时不包含list2所有内容” 或 “A列包含list1任意内容”:
df['结果'] = df[(df['B列'].str.contains(list1))&(~df['B列'].str.contains(list2))&(df['C列']<40)]['结果'].fillna('Y2')
print(df)
>>>以上打印输出结果:
产品 A列 B列 C列 结果
0 产品1 收益 金融收益 10 NaN
1 产品2 收益好 航司收益 20 NaN
2 产品3 差 收益 30 Y2
3 产品4 收益 收益 40 NaN
###N1标签:C列的值<40,且满足“B列包含list2任意内容” :
df['结果'] = df[(df['B列'].str.contains(list2))&(df['C列']<40)]['结果'].fillna('N1')
print(df)
>>>以上打印输出结果:
产品 A列 B列 C列 结果
0 产品1 收益 金融收益 10 N1
1 产品2 收益好 航司收益 20 N1
2 产品3 差 收益 30 NaN
3 产品4 收益 收益 40 NaN
想达到的结果
在有很多行数据时,可以按照以下逻辑为结果列打标签:
Y1标签:C列的值>=40,且满足“B列包含list1任意内容的同时不包含list2所有内容” 或 “A列包含list1任意内容”
Y2标签:C列的值<40,且满足“B列包含list1任意内容的同时不包含list2所有内容” 或 “A列包含list1任意内容”
N1标签:C列的值<40,且满足“B列包含list2任意内容”
产品 A列 B列 C列 结果
0 产品1 收益 金融收益 10 N1
1 产品2 收益好 航司收益 20 N1
2 产品3 差 收益 30 Y2
3 产品4 收益 收益 40 Y1