Python 多个IF语句,用于在中创建另一列
我正在使用pandas有条件地创建另一个列,但我的数据集中有大约103个条件需要循环是否有一种方法可以创建if-elif-else语句,而不必创建这么多语句? My range有两种类型的字符串,其分类名称以N或S结尾,范围从1到53。例外情况是3、7、14、17、53和54 我得到了一个if-elif-else开始,但我还有大约100个elif语句。例如,如果类别为1N,那么我将在索引列中创建一行,显示1 我的数据: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]:
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)
您不需要为此创建另一个函数;只需将该部分放入现有的索引
函数中即可