Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python检查列中的字符串以执行公式_Python_Pandas_Numpy - Fatal编程技术网

Python检查列中的字符串以执行公式

Python检查列中的字符串以执行公式,python,pandas,numpy,Python,Pandas,Numpy,我有一个df,如下所示,我正试图根据计划列和成员计数列创建一个名为df['Seat\u AVAIL']的新列 基本上: 如果df['Plan']=('LUX'或'Premium'),则通过执行(10+(mem\u count val-1)*5)计算df['Seat\u AVAIL'] elifdf['Plan']='Limited'然后,计算df['Seat\u AVAIL'](5+(mem\u count val-1)*2)以计算mem\u count 否则,df['PLAN']='Free'

我有一个df,如下所示,我正试图根据
计划
列和
成员计数
列创建一个名为
df['Seat\u AVAIL']
的新列

基本上:

如果
df['Plan']
=(
'LUX'
'Premium'
),则通过执行(10+(mem\u count val-1)*5)计算
df['Seat\u AVAIL']

elif
df['Plan']
=
'Limited'
然后,计算
df['Seat\u AVAIL']
(5+(mem\u count val-1)*2)以计算
mem\u count

否则,
df['PLAN']
=
'Free'
df['Seat\u AVAIL']
应为空

数据帧:

ID    Guest_COUNT   Mem_COUNT   Plan
8472    82            20     Free 
2426    67            10     Premium
2299    55            21     LUX
3787    48            52     LIMITED
2553    41            12     Free 
8660    39            16     Premium
所需输出示例,带座椅可用性计算

ID    Guest_COUNT   Mem_COUNT   Seat_AVAIL    Plan
8472    82            20          NULL             Free 
2426    67            10          50               Premium
2299    55            21         110               LUX
3787    48            6           15               LIMITED
2553    41            12         NULL              Free 
8660    39            8           45               Premium
我尝试在google sheets中使用ifs语句直接执行类似操作,但出现了错误,我认为python可能有一个快速解决方案。

使用指定的掩码和输出,如果不匹配,则任何掩码值都返回同一列:

m1 = df['Plan'].isin(['LUX', 'Premium'])
m2 = df['Plan'] == 'Limited'
m3 = df['Plan'] == 'Free'

s1 = 10+(df['Mem_COUNT']-1)*5
s2 = 5+(df['Mem_COUNT']-1)*2

df['Seat_AVAIL'] = np.select([m1, m2, m3], [s1, s2, np.nan], default=df['Mem_COUNT'])

print (df)
     ID  Guest_COUNT  Mem_COUNT     Plan  Seat_AVAIL
0  8472           82         20     Free         NaN
1  2426           67         10  Premium        55.0
2  2299           55         21      LUX       110.0
3  3787           48         52  LIMITED        52.0 <- no match
4  2553           41         12     Free         NaN
5  8660           39         16  Premium        85.0
df['Seat_AVAIL'] = np.select([m1, m2], [s1, s2], default=np.nan)

print (df)
     ID  Guest_COUNT  Mem_COUNT     Plan  Seat_AVAIL
0  8472           82         20     Free         NaN
1  2426           67         10  Premium        55.0
2  2299           55         21      LUX       110.0
3  3787           48         52  LIMITED         NaN <- no match
4  2553           41         12     Free         NaN
5  8660           39         16  Premium        85.0