Python pandas根据azid中uuid位置提取Rollup与Snapshot_Interval值
问题修正与可行实现方案
你原来的代码错误主要有两点:
- 没有把
azid、Rollup、Snapshot_Interval三个列里字符串格式的列表转成可索引的Python列表 - 没有按uuid在azid中的位置匹配取对应值,逻辑完全不符合需求
完整可运行代码
import pandas as pd import ast # 读取数据,如果你是从csv/tsv读取直接替换这步即可,这里先用示例构造df data = [ ["ce2354", "['fe4578'; 'ce2354']", "[1;1]", "['MONTHLY';'WEEKLY']"], ["ca8458", "['de9874'; 'ca8458']", "[7;6]", "['WEEKLY';'DAILY']"], ["be4589", "['be4589';'we6780']", "[4;6]", "['YEARLY','WEEKLY']"] ] df = pd.DataFrame(data, columns=['uuid', 'azid', 'Rollup', 'Snapshot_Interval']) # 先处理字符串转列表:统一把分号替换成逗号,再用ast.literal_eval转成真实列表 def str_to_list(s): s = s.replace(';', ',') return ast.literal_eval(s) df['azid'] = df['azid'].apply(str_to_list) df['Rollup'] = df['Rollup'].apply(str_to_list) df['Snapshot_Interval'] = df['Snapshot_Interval'].apply(str_to_list) # 按规则取值 df['Rollup'] = df.apply(lambda x: x['Rollup'][0] if x['uuid'] == x['azid'][1] else x['Rollup'][1], axis=1) df['Snapshot_Interval'] = df.apply(lambda x: x['Snapshot_Interval'][0] if x['uuid'] == x['azid'][1] else x['Snapshot_Interval'][1], axis=1) # 输出结果 print(df)
输出结果验证
运行后得到的结果和你预期的完全一致:
uuid azid Rollup Snapshot_Interval 0 ce2354 [fe4578, ce2354] 1 MONTHLY 1 ca8458 [de9874, ca8458] 7 WEEKLY 2 be4589 [be4589, we6780] 6 WEEKLY
内容的提问来源于stack exchange,提问作者coolguy2024
相关产品推荐
相关产品推荐

