我有一个 Dataframe ,其中列为first,col1、col2、col3、row1导入panda作为pd
df = pd.DataFrame({'first': ['1', '2', '3', '4', '5', '6', '7', '8'], 'col1': ['yes', 'yes', 'yes', 'yes', 'no', 'no', 'no', 'no'], 'col2': ['yes', 'yes', 'no', 'no' ,'yes', 'yes' ,'no', 'no'], 'col3': ['yes', 'no', 'yes', 'no','yes', 'no','yes', 'no'], 'row1':['4','5','7','3','7','3','79','8']})
第一列1列2列3行1 1是是是4 2是是否5 3是否是7 4是否否3 5否是是7 6否是否3 7否否是79 8否否8
我想应用如下条件并创建一个新列new_one
df.loc[((df['col1']=='no') & (df['col2']=='no') & (df['col3'] == 'no')),'new_one'] = 'no'
df.loc[~((df['col1']=='no') & (df['col2']=='no') & (df['col3'] == 'no')),'new_one'] = 'yes`
**问题:*数据框中的列数是动态的,在上面的数据框中不是常数3,而是与模式匹配,这里是“col”
我想根据模式选择列(此处为col*),并对每列应用条件('== 'no'')和'&',然后创建一个新列new_one
我实现了这下面的代码但不工作
col_list=[]
for name in df.columns:
if(re.search("col",name))
col_list.append(name)
count=0
cond=''
for col in col_list:
if(count==0):
cond+="(df[\'"+col+"\'] == 'no')"
else:
cond+="&(df[\'"+col+"\'] == 'no')"
count=count+1
df.loc[cond,'new_one'] = 'no'
df.loc[~cond,'new_one'] = 'no'
**问题:**cond是一个字符串,我不知道如何使用条件作为df。loc期望cond是series。我也尝试了eval,但是没有成功。请告诉我任何解决方法?
first col1 col2 col3 row1 new_one
1 yes yes yes 4 yes
2 yes yes no 5 yes
3 yes no yes 7 yes
4 yes no no 3 yes
5 no yes yes 7 yes
6 no yes no 3 yes
7 no no yes 79 yes
8 no no no 8 no
2条答案
按热度按时间6ie5vjzr1#
这里使用lambda来计算“no”出现的次数。
35g0bw712#
使用
all
/any
:或者,对于单个命令中的yes/no,
numpy.where
:输出:
动态列数: