[英]How to creat a target dataframe applying multiple condition between the rows of a panda dataframe
[英]Applying IF Condition on a panda dataframe
我有一个 dataframe 有三列: Subchannel
, Campaign
和ID
Subchannel Campaign ID
PROMO FLASHSALES X123
PROMO PERCENTOFF Y123
如果子通道以"PRO"
开头,我想编写一个 python 代码,那么应该在 dataframe EML_LOOKUP
中创建一个与 Column ID
具有相同值的新列。 下面是我正在尝试的代码,但它不起作用。 请帮忙。
if EML_LOOKUP['Subchannel'].str.startswith("PRO"):
EML_LOOKUP['New_Column'] = EML_LOOKUP['ID']
您可以使用np.where()
以矢量化方式工作并且比apply()
更快:
import numpy as np
EML_LOOKUP['New_Column'] = np.where(EML_LOOKUP['Subchannel'].str.startswith("PRO"),EML_LOOKUP['ID'],np.nan)
在此示例中,如果子通道不以 PRO 开头,我们将用NaN
填充新列,否则,我们将设置 ID 值。
这是一个完整的工作示例:
EML_LOOKUP = pd.DataFrame({'Subchannel':['PROMO','PROMO','NOT PROMO'],
'Campaign':['FALSHSALES','PERCENTOFF','REGULAR'],
'ID':['X123','Y123','Z123']})
Subchannel Campaign ID
0 PROMO FALSHSALES X123
1 PROMO PERCENTOFF Y123
2 NOT PROMO REGULAR Z123
应用建议的解决方案后:
EML_LOOKUP['New_Column'] = np.where(EML_LOOKUP['Subchannel'].str.startswith("PRO"),EML_LOOKUP['ID'],np.nan)
我们得到这个 output:
Subchannel Campaign ID New_Column
0 PROMO FALSHSALES X123 X123
1 PROMO PERCENTOFF Y123 Y123
2 NOT PROMO REGULAR Z123 NaN
如果有多个条件,我们可以使用将它们用括号分隔并由 boolean 运算符&
或|
加入取决于我们希望使用的逻辑:
EML_LOOKUP = pd.DataFrame({'Subchannel':['PROMO','PROMO','NOT PROMO'],
'Campaign':['FALSHSALES','PERCENTOFF','REGULAR'],
'ID':['X123','Y123','Z123'],
'Campaign':[10,3,20]})
EML_LOOKUP['New_Column'] = np.where((EML_LOOKUP['Subchannel'].str.startswith("PRO")) &
(EML_LOOKUP['Campaign'] > 5),
EML_LOOKUP['ID'],np.nan)
Output:
Subchannel Campaign ID New_Column
0 PROMO 10 X123 X123
1 PROMO 3 Y123 NaN
2 NOT PROMO 20 Z123 NaN
Boolean 使用您的str.startswith
进行索引:
EML_LOOKUP['New_Column'] = EML_LOOKUP['ID'][EML_LOOKUP['Subchannel'].str.startswith('PRO')]
EML_LOOKUP['New_Column'] = EML_LOOKUP.loc[EML_LOOKUP['Subchannel'].str.startswith("PRO")].ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.