Python 如何基于相应列系列中的值在一系列列上应用函数?

Python 如何基于相应列系列中的值在一系列列上应用函数?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个df,其中我有几个列,根据这些列中的值(1-6),我想给相应的列分配一个值(0-1)。我可以做一列一列的基础上,但想使它成为一个单一的功能。下面是一些示例代码: import pandas as pd df = pd.DataFrame({'col1': [1,3,6,3,5,2], 'col2': [4,5,6,6,1,3], 'col3': [3,6,5,1,1,6], 'colA': [0,0,0,0,0,0], 'colB': [0,0,0,0

我有一个df,其中我有几个列,根据这些列中的值(1-6),我想给相应的列分配一个值(0-1)。我可以做一列一列的基础上,但想使它成为一个单一的功能。下面是一些示例代码:

import pandas as pd
df = pd.DataFrame({'col1': [1,3,6,3,5,2], 'col2': [4,5,6,6,1,3], 'col3': [3,6,5,1,1,6],
                  'colA': [0,0,0,0,0,0], 'colB': [0,0,0,0,0,0], 'colC': [0,0,0,0,0,0]})
(col1对应colA,col2对应colB,col3对应colC)

此代码以列为单位工作:

df.loc[(df.col1 != 1) & (df.col1 < 6), 'colA'] = (df['colA']+ 1)
df.loc[(df.col1!=1)和(df.col1<6),“colA”]=(df[“colA”]+1)
但我希望能够有一个列的列表,可以这样说,并让它与另一列相对应。类似这样的(但实际上是有效的):

m=df['col1':'col3']!=1&df['col1':'col3']<6
df.loc[m,'colA':'colC']+=1

谢谢大家!

下面是我要做的:

#拆分数据帧
sub_df=df.iloc[:,:3]
abc=df.iloc[:,3:]
#生成numpy数组真值表
真值表=(sub_df.to_numpy()>1)和(sub_df.to_numpy()<6)
#基于numpy真值表重新定义abc
new_abc=pd.DataFrame(truth_table.astype(int),columns=['colA','colB','colC'])
#加入更新的数据帧子组
新测向=pd.concat([子测向,新测向abc],轴=1)

思想是通过过滤
数据帧
s,然后通过掩码过滤列,并通过另一个
df2
重命名列,最后仅用于
df。列

df1 = df.loc[:, 'col1' : 'col3'] 
df2 = df.loc[:, 'colA' : 'colC']

d = dict(zip(df1.columns,df2.columns))

df1 = ((df1 != 1) & (df1 < 6)).rename(columns=d)

df[df2.columns] = df[df2.columns].add(df1)
print (df)
   col1  col2  col3  colA  colB  colC
0     1     4     3     0     1     1
1     3     5     6     1     1     0
2     6     6     5     0     0     1
3     3     6     1     1     0     0
4     5     1     1     1     0     0
5     2     3     6     1     1     0
df1=df.loc[:,'col1':'col3']
df2=df.loc[:,'colA':'colC']
d=dict(zip(df1.columns,df2.columns))
df1=((df1!=1)和(df1<6))。重命名(列=d)
df[df2.columns]=df[df2.columns].add(df1)
打印(df)
col1 col2 col3 colB colC
0     1     4     3     0     1     1
1     3     5     6     1     1     0
2     6     6     5     0     0     1
3     3     6     1     1     0     0
4     5     1     1     1     0     0
5     2     3     6     1     1     0
df1 = df.loc[:, 'col1' : 'col3'] 
df2 = df.loc[:, 'colA' : 'colC']

d = dict(zip(df1.columns,df2.columns))

df1 = ((df1 != 1) & (df1 < 6)).rename(columns=d)

df[df2.columns] = df[df2.columns].add(df1)
print (df)
   col1  col2  col3  colA  colB  colC
0     1     4     3     0     1     1
1     3     5     6     1     1     0
2     6     6     5     0     0     1
3     3     6     1     1     0     0
4     5     1     1     1     0     0
5     2     3     6     1     1     0