You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:09:01