Python 多个IF语句,用于在中创建另一列

Python 多个IF语句,用于在中创建另一列,python,pandas,Python,Pandas,我正在使用pandas有条件地创建另一个列,但我的数据集中有大约103个条件需要循环是否有一种方法可以创建if-elif-else语句,而不必创建这么多语句? My range有两种类型的字符串,其分类名称以N或S结尾,范围从1到53。例外情况是3、7、14、17、53和54 我得到了一个if-elif-else开始,但我还有大约100个elif语句。例如,如果类别为1N,那么我将在索引列中创建一行,显示1 我的数据: data_frame['column'].head(5) Out[2]:

我正在使用pandas有条件地创建另一个列,但我的数据集中有大约103个条件需要循环是否有一种方法可以创建if-elif-else语句,而不必创建这么多语句?

My range有两种类型的字符串,其分类名称以N或S结尾,范围从1到53。例外情况是3、7、14、17、53和54

我得到了一个if-elif-else开始,但我还有大约100个elif语句。例如,如果类别为1N,那么我将在索引列中创建一行,显示1

我的数据:

data_frame['column'].head(5)
Out[2]: 
0    1N
1    1N
2    1N
3    1N
4    2N
Name: column, dtype: object
声明:

#loop
def index(c):
    if c['column'] == '1N':
        return 1
    elif c['column'] == '1S':
          return 2
    elif c['column'] == '2N':
          return 3  
    else:
        return 'Undefined'

data_Frame['Index'] = data_frame.apply(index, axis = 1)  
检查结果:

data_frame[['column', 'Index']].head(5)
Out[7]: 
  Column Index
0  1N     1
1  1N     1
2  1N     1
3  1N     1
4  2N     3
试用版1:我得到了一个浮点数,但是是十进制格式,索引错误。它从0开始,而不是从1开始

#Create list
names = ["1N", "1S", "2N", "2S", "3", "4N", "4S", "5N", "5S", "6N", "6S", "7"] 
#Create function
def index(c):
    if c['column'] in names: 
        return names.index(c['column'])
#Apply index to data
data_frame['Index'] = old_info.apply(index, axis = 1)  
#results
data_frame['Index'].head(5)
Out[7]: 
0    0.0
1    0.0
2    0.0
3    0.0
4    2.0
Name: Index, dtype: float64

我能够创建一个基于@Hamms的解决方案。以下是一个可复制的示例:

import pandas as pd
#Create dataframe
column = ['1N', '1N', '1N', '1N', '2N']
data_frame = pd.DataFrame(column, columns = ['column'])

#Create list
names = ["1N", "1S", "2N", "2S", "3", "4N", "4S", "5N", "5S", "6N", "6S", "7"] 
#Create function
def index(c):
    if c['column'] in names: 
        i = names.index(c['column'])
        return str(i + 1)  
#Create index column based on names list    
data_frame['Index'] = data_frame.apply(index, axis = 1)    

#Check result
data_frame[['Index', 'column']]
Out[26]: 
  Index column
0     1     1N
1     1     1N
2     1     1N
3     1     1N
4     3     2N

我能够创建一个基于@Hamms的解决方案。以下是一个可复制的示例:

import pandas as pd
#Create dataframe
column = ['1N', '1N', '1N', '1N', '2N']
data_frame = pd.DataFrame(column, columns = ['column'])

#Create list
names = ["1N", "1S", "2N", "2S", "3", "4N", "4S", "5N", "5S", "6N", "6S", "7"] 
#Create function
def index(c):
    if c['column'] in names: 
        i = names.index(c['column'])
        return str(i + 1)  
#Create index column based on names list    
data_frame['Index'] = data_frame.apply(index, axis = 1)    

#Check result
data_frame[['Index', 'column']]
Out[26]: 
  Index column
0     1     1N
1     1     1N
2     1     1N
3     1     1N
4     3     2N

是否希望每个分类名称都有一个唯一的索引?如果是这样,您可以将它们全部放在一个列表中,如
names=[“1N”、“1S”、“2N”、…]
,然后
返回名称。索引(c[“column]”)
是的,每个分类名称都将获得唯一的索引。但是,每个分类值在数据集中都有不同的计数,并且并非所有值都位于我的数据集中。我可以运行它,但因为找不到一些值而出错。如果找不到,是否有办法使“return”跳过?ValueError:(“'27'不在列表中,'发生在索引93')
如果c['column']在名称中:返回名称。索引(c['column'])
只需将其转换
i=names.index(c['column']);return str(i+1)
您不需要为此创建另一个函数;只需将该部分放在现有的
索引
函数中,您想为每个分类名称创建一个唯一的索引吗?如果是这样,您可以将它们全部放在一个列表中,如
names=[“1N”、“1S”、“2N”、…]
,然后
返回名称。索引(c[“column]”)
是的,每个分类名称都将获得唯一的索引。但是,每个分类值在数据集中都有不同的计数,并且并非所有值都位于我的数据集中。我可以运行它,但因为找不到一些值而出错。如果找不到,是否有办法使“return”跳过?ValueError:(“'27'不在列表中,'发生在索引93')
如果c['column']在名称中:返回名称。索引(c['column'])
只需将其转换
i=names.index(c['column']);return str(i+1)
您不需要为此创建另一个函数;只需将该部分放入现有的
索引
函数中即可