重新分类熊猫列值

时间:2021-03-01 15:38:31

标签: python pandas

我的数据帧是使用 pd.read_html() 获取的,结果如下:

| country  | values         |
| -------- | -------------- |
| Finland  | 0 | 0 | 0 | 1  |
| Norway   | 0 | 5 | 0 | 0  |
| Germany  |        -       |
| ....     | ....           |

我的目标是根据以下逻辑重新分类“值”(字符串)字段。 'values' 字段可以被视为 4 个数字,范围从 0 到 150,由 | 分隔。此外,有时该字段填充为 -

逻辑

获取大于 0 的最后一个数字(位置明智)并创建一个新列 level 代表所述数字的索引。如果值列没有任何数字,则在级别列中写入 0。

示例

对于芬兰,最后一个大于 0 的数字将为 1。因此级别列值应为 4(从 1 开始计算索引时)。

对于挪威,最后一个大于 0 的数字是 5。所以级别列值应该是 2。

对于德国,级别的值应为 0,因为值中没有数字。

工作流程

我尝试用 | 替换 , ,删除空格并将结果转换为列表。然而,我被卡住了,因为我似乎无法弄清楚如何达到我想要的结果。我想完全在数据框中执行此操作,然后导出到 csv。

1 个答案:

答案 0 :(得分:1)

values 列上使用 apply 将获得您想要的结果:

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)
相关问题