Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新分类列值_Python_Pandas - Fatal编程技术网

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。

使用“on
values
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)