我的数据帧是使用 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。
答案 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)