Python 3.x 如何基于多个条件创建变量?

Python 3.x 如何基于多个条件创建变量?,python-3.x,pandas,numpy,Python 3.x,Pandas,Numpy,在下面的代码中,我需要创建两个变量,即flag1和flag2。它们是基于多个条件创建的。我使用了np.select方法,如下所示。然而,我想知道还有什么其他方法可以做到这一点?在我实际工作的情况下,会有更多的条件来创造国旗。任何建议都会很好 import numpy as np import pandas as pd start_date = '2020-04-01' end_date = '2020-05-01' d1 = {'customer type':['walk in', 'onl

在下面的代码中,我需要创建两个变量,即flag1和flag2。它们是基于多个条件创建的。我使用了np.select方法,如下所示。然而,我想知道还有什么其他方法可以做到这一点?在我实际工作的情况下,会有更多的条件来创造国旗。任何建议都会很好

import numpy as np
import pandas as pd

start_date = '2020-04-01'
end_date = '2020-05-01'

d1 = {'customer type':['walk in', 'online app', 'phone app', 'referral'], 'office visit': 
['location1','location1','location1','location1'],'date1':['2020-04-17','2020-05-17','2020-03- 
01','2020-05-01'],'date2':['2020-05-18','2020-04-18','2020-04-03','2020-05-19']}

df1=pd.DataFrame(data=d1)

con1 = [ (df1['date1'] >= start_date ) & (df1['date1'] < end_date )]
result1 = ['yes']
df1['flag1'] = np.select(con1, result1)

con2 = [ (df1['date2'] >= start_date ) & (df1['date2'] < end_date )]
result2 = ['yes']
df1['flag2'] = np.select(con2, result2)
将numpy导入为np
作为pd进口熊猫
开始日期='2020-04-01'
结束日期='2020-05-01'
d1={‘客户类型’:[‘走进’、‘在线应用’、‘电话应用’、‘推荐’]、‘办公室访问’:
['location1'、'location1'、'location1'、'location1']、'date1':['2020-04-17'、'2020-05-17'、'2020-03-
01’、‘2020-05-01’、‘日期2’:[‘2020-05-18’、‘2020-04-18’、‘2020-04-03’、‘2020-05-19’]
df1=pd.DataFrame(数据=d1)
con1=[(df1['date1']>=开始日期)和(df1['date1']<结束日期)]
结果1=[“是”]
df1['flag1']=np.select(con1,result1)
con2=[(df1['date2']>=开始日期)和(df1['date2']<结束日期)]
结果2=[“是”]
df1['flag2']=np.select(con2,result2)

您可以使用字典动态更新变量名的键,并添加相应的变量值

例如:

import numpy as np
import pandas as pd

start_date = '2020-04-01'
end_date = '2020-05-01'

flags = dict()


flag_string = 'flag'

# This creates the strings flag1 and flag2 automatically
for i in range(1, 3):
    # concatenate the flag_string with the index of the loop
    flags[flag_string + str(i)] = flag_string + str(i)

print(flags)

d1 = {'customer type': ['walk in', 'online app', 'phone app', 'referral'], 
      'office visit':  ['location1','location1','location1','location1'],'date1':['2020-04-17','2020-05-17','2020-03- \
01','2020-05-01'],'date2':['2020-05-18','2020-04-18','2020-04-03','2020-05-19']}

df1=pd.DataFrame(data=d1)

con1 = [ (df1['date1'] >= start_date ) & (df1['date1'] < end_date )]
result1 = ['yes']
df1[flags['flag1']] = np.select(con1, result1)

con2 = [ (df1['date2'] >= start_date ) & (df1['date2'] < end_date )]
result2 = ['yes']
df1[flags['flag2']] = np.select(con2, result2)

将numpy导入为np
作为pd进口熊猫
开始日期='2020-04-01'
结束日期='2020-05-01'
flags=dict()
flag_string='flag'
#这将自动创建字符串flag1和flag2
对于范围(1,3)内的i:
#将标志字符串与循环的索引连接起来
flags[flag_string+str(i)]=flag_string+str(i)
打印(标志)
d1={‘客户类型’:[‘走进’、‘在线应用’、‘电话应用’、‘推荐’],
“办公室访问”:“地点1”、“地点1”、“地点1”、“地点1”]、“日期1”:“2020-04-17”、“2020-05-17”、“2020-03-\
01’、‘2020-05-01’、‘日期2’:[‘2020-05-18’、‘2020-04-18’、‘2020-04-03’、‘2020-05-19’]
df1=pd.DataFrame(数据=d1)
con1=[(df1['date1']>=开始日期)和(df1['date1']<结束日期)]
结果1=[“是”]
df1[flags['flag1']=np.select(con1,result1)
con2=[(df1['date2']>=开始日期)和(df1['date2']<结束日期)]
结果2=[“是”]
df1[flags['flag2']=np.select(con2,result2)

这就是如何将字典值替换为变量的方法。我还提供了一个for循环,用于构建您的标志字典。

请为建议添加预期输出。问题是我无法使用公司电脑复制和粘贴任何文本到本网站。我必须在没有安装python的个人笔记本电脑中键入所有这些代码。输出将是另外两列flag1和flag2被添加到数据帧df1中,符合条件的行的值为yes,不符合条件的行的值为0。感谢@CobraPi的想法。我想问一下,我怎样才能使flags[“flag1”]和flags[“flag2”]成为我的数据帧df1中的变量?我已经添加了一个我认为你在问的示例。你说的是df1['flag1']?因为如果你是,那不是一个变量,那是一个indexOh,我不知道df1['flag1']和df2['flag2']是索引,但不是变量。谢谢你提供的信息。但是,有没有基于多个条件直接创建变量的方法?在SQL中,当condition1和condition2的结果作为新的_变量结束时,使用case很容易创建计算字段。在python中完成同样的事情有那么难吗?你能给我一个例子说明“基于多个条件创建变量”的意思吗?df1['flag1]和df1['flag2']是我需要在基于多个条件的数据帧df1中创建的新变量。