Python 重新分类列值
使用Python 重新分类列值,python,pandas,Python,Pandas,使用pd.read\u html()获取我的数据帧,并产生以下结果: | country | values | | -------- | -------------- | | Finland | 0 | 0 | 0 | 1 | | Norway | 0 | 5 | 0 | 0 | | Germany | - | | .... | .... | 我的目标是根据以下逻辑重新分类“值”(字符串)字段。“值”字段可以被
pd.read\u html()
获取我的数据帧,并产生以下结果:
| country | values |
| -------- | -------------- |
| Finland | 0 | 0 | 0 | 1 |
| Norway | 0 | 5 | 0 | 0 |
| Germany | - |
| .... | .... |
我的目标是根据以下逻辑重新分类“值”(字符串)字段。“值”字段可以被视为4个数字,范围从0到150,由
分隔。此外,有时该字段填写为-
逻辑:
获取大于0的最后一个数字(按位置),并创建一个新列level
,该列表示所述数字的索引。如果“值”列没有任何数字,请在“级别”列中写入0
示例:
对于芬兰,最后一个大于0的数字是1。因此,level列的值应该是4(从1开始计算索引时)
对于挪威来说,最后一个大于0的数字是5。所以level列的值应该是2
对于德国,级别的值应为0,因为值中没有数字
工作流:
我尝试用,
替换,
,删除空格并将结果转换为列表。然而,由于我似乎不知道如何达到我想要的结果,我被困住了。我希望完全在数据框内执行此操作,然后导出到csv。使用“onvalues
columns”将获得您想要的结果:
def get_level(val):
l = val.split('|')
index = 0
max_ = 0
try: # for any case the data isn't 4 numbers separated with pipe
for i in range(len(l)):
if int(l[i]) > max_:
max_ = int(l[i])
index = i+1 # to get index 1-4 instead of 0-3
except:
pass
return index
df['level'] = df['values'].apply(get_level)