python处理阿里云账单



import pandas as pd

# 使用 openpyxl 作为引擎读取 .xlsx 文件
df = pd.read_excel('5month.xlsx', engine='openpyxl')

# 1. 地域为“华东1(杭州)”或为空白的保留,其余改为“海外项目”
domestic_regions = ['华东1(杭州)', '']
not_domestic = ~df['地域'].isin(domestic_regions) & df['地域'].notna()
df.loc[not_domestic, '资源组'] = '海外项目'

# 2. 产品是 "API 网关" 的情况处理,资源组全部改为“云电脑”
api_gateway_mask = df['产品'] == 'API 网关'
df.loc[api_gateway_mask, '资源组'] = '云电脑'

# 3. 产品是 "CDN" 的情况处理,资源组如果不是“海外项目”,则改为“云电脑”
cdn_mask = df['产品'] == 'CDN'
df.loc[cdn_mask & (df['资源组'] != '海外项目'), '资源组'] = '云电脑'

# 4. 地域包含“中国大陆”的行,资源组全部改为“云电脑”
china_mainland_mask = df['地域'].str.contains('中国大陆', na=False)
df.loc[china_mainland_mask, '资源组'] = '云电脑'

# 5. 新增:产品是 "Web应用防火墙" 的情况,资源组改为 "devops"
waf_mask = df['产品'] == 'Web应用防火墙'
df.loc[waf_mask, '资源组'] = 'devops'

# 5.产品是 "阿里邮箱" 的情况,资源组改为 "云电脑"

# 6. 新增:产品是 "大数据开发治理平台 DataWorks" 的情况处理,资源组改为“数据项目”
dataworks_mask = df['产品'] == '大数据开发治理平台 DataWorks'
df.loc[dataworks_mask, '资源组'] = '数据项目'

# 7. 新增:产品是 "短信服务" 的情况,资源组改为“云电脑”
sms_service_mask = df['产品'] == '短信服务'
df.loc[sms_service_mask, '资源组'] = '云电脑'


# 8. 新增:产品是 "对象存储" 的情况,资源组里不是“海外项目”的全部替换为“云电脑”
object_storage_mask = df['产品'] == '对象存储'
df.loc[object_storage_mask & (df['资源组'] != '海外项目'), '资源组'] = '云电脑'

# 9. 新增:产品是 "负载均衡",资源组为“默认资源组”的替换为“云电脑”
load_balancer_mask = df['产品'] == '负载均衡'
df.loc[load_balancer_mask & (df['资源组'] == '默认资源组'), '资源组'] = '云平台'


# 10. 新增:产品是 "函数计算",资源组全部替换为“云平台”
fc_mask = df['产品'] == '函数计算'
df.loc[fc_mask, '资源组'] = '云平台'

# 11. 新增:产品是 "号码认证服务",资源组全部替换为“云电脑”
phone_auth_mask = df['产品'] == '号码认证服务'
df.loc[phone_auth_mask, '资源组'] = '云电脑'

# 12. 新增:产品是 "检索分析服务 Elasticsearch版" 且 实例ID匹配,资源组替换为“云电脑”
es_mask = (df['产品'] == '检索分析服务 Elasticsearch版') & (df['实例ID'] == 'es-dlyun-test-serverless-t4q')
df.loc[es_mask, '资源组'] = '云电脑'

# 13. 新增:产品是 "块存储",根据不同的实例ID设置不同资源组
block_storage_mask = df['产品'] == '块存储'
# 实例ID为 cn-hangzhou → 云电脑
bs_cn_mask = block_storage_mask & (df['实例ID'] == 'cn-hangzhou')
df.loc[bs_cn_mask, '资源组'] = '云电脑'
# 指定的多个实例ID → 云平台
bs_special_ids = ['d-bp1asvm1a41dgz65ecx6', 'd-bp146c8tm5y787sycvw4', 'd-bp19xk9g3c0wnckjamxi']
bs_special_mask = block_storage_mask & df['实例ID'].isin(bs_special_ids)
df.loc[bs_special_mask, '资源组'] = '云平台'



# 14. 新增:产品是 "内容安全",资源组全部替换为“云电脑”
content_safety_mask = df['产品'] == '内容安全'
df.loc[content_safety_mask, '资源组'] = '云电脑'


# 15. 新增:产品是 "日志服务",资源组为“默认资源组”的替换为“云电脑”
log_service_mask = df['产品'] == '日志服务'
df.loc[log_service_mask & (df['资源组'] == '默认资源组'), '资源组'] = '云电脑'


# 16. 新增:产品是 "容器服务Kubernetes版",根据实例ID设置不同资源组
k8s_mask = df['产品'] == '容器服务Kubernetes版'

# 实例ID列表1 → 云平台
k8s_cloud_platform_ids = [
    'cc3d7b31686b944aabf0263f7341b1a82',
    'c22143730ab6e40b09ec7c1c51d4de0c6'
]
k8s_mask1 = k8s_mask & df['实例ID'].isin(k8s_cloud_platform_ids)
df.loc[k8s_mask1, '资源组'] = '云平台'

# 实例ID列表2 → 云电脑
k8s_cloud_computer_id = 'c822361ea16034b818e5dc1f941fa550e'
k8s_mask2 = k8s_mask & (df['实例ID'] == k8s_cloud_computer_id)
df.loc[k8s_mask2, '资源组'] = '云电脑'



# 17. 新增:产品是 "数据传输服务",资源组全部替换为“数据项目”
dts_mask = df['产品'] == '数据传输服务'
df.loc[dts_mask, '资源组'] = '数据项目'


# 18. 新增:产品是 "数据库备份",资源组全部替换为“云电脑”
db_backup_mask = df['产品'] == '数据库备份'
df.loc[db_backup_mask, '资源组'] = '云电脑'

# 19. 新增:产品是 "数据总线 DataHub",资源组全部替换为“数据项目”
datahub_mask = df['产品'] == '数据总线 DataHub'
df.loc[datahub_mask, '资源组'] = '数据项目'


# 20. 新增:产品是 "文件存储 NAS" 或 "语音服务",资源组全部替换为“云电脑”
nas_voice_mask = df['产品'].isin(['文件存储 NAS', '语音服务'])
df.loc[nas_voice_mask, '资源组'] = '云电脑'


# 21. 新增:产品是 "云服务器 ECS",根据实例昵称和资源组条件替换为不同值
cloud_computer_names = [
    'dlbbs',
    'ESS-asg-dlyun.pc',
    'test_dlyun_gocron-node_dldts-provider-businesscenter',
    'k8s-test-worker1',
    'pre-k8s-worker2',
    'ESS-asg-businesscenter'
]

cloud_platform_names = [
    'k8s-dsom-pro-worke2',
    'dlplamtop-vue-备案'
]

data_project_name = ['vcs_webrtc信令2']

# 创建一个函数来检查实例昵称是否包含指定字符串
def contains_instance_name(instance_name, name_list):
    return any(name in instance_name for name in name_list)

# 应用规则:产品是 "云服务器 ECS" 并且实例昵称包含特定字符串时,修改资源组
ecs_mask = df['产品'] == '云服务器 ECS'

df.loc[ecs_mask & df['实例昵称'].apply(lambda x: contains_instance_name(x, cloud_computer_names)), '资源组'] = '云电脑'
df.loc[ecs_mask & df['实例昵称'].apply(lambda x: contains_instance_name(x, cloud_platform_names)), '资源组'] = '云平台'
df.loc[ecs_mask & df['实例昵称'].apply(lambda x: contains_instance_name(x, data_project_name)), '资源组'] = '云计算'





# 22. 新增:产品是 "云监控",根据实例ID内容替换资源组
cloud_monitor_mask = df['产品'] == '云监控'

# 包含 '22143730ab6e40b' 的 → 云平台
contains_platform = df['实例ID'].str.contains('22143730ab6e40b', na=False)
df.loc[cloud_monitor_mask & contains_platform, '资源组'] = '云平台'

# 包含 '24113629456124' 的 → 云电脑
contains_computer = df['实例ID'].str.contains('24113629456124', na=False)
df.loc[cloud_monitor_mask & contains_computer, '资源组'] = '云电脑'



# 23. 新增:产品是 "云解析 PrivateZone",资源组全部替换为“云平台”
privatezone_mask = df['产品'] == '云解析 PrivateZone'
df.loc[privatezone_mask, '资源组'] = '云平台'


# 24. 新增:产品是 "云解析DNS",资源组全部替换为“海外项目”
dns_mask = df['产品'] == '云解析DNS'
df.loc[dns_mask, '资源组'] = '海外项目'


# 25. 新增:产品是 "云市场三方",资源组全部替换为“devops”
cloud_market_mask = df['产品'] == '云市场三方'
df.loc[cloud_market_mask, '资源组'] = 'devops'


# 25. 新增:产品是 "云消息队列 MQ",资源组全部替换为“云电脑”
mq_mask = df['产品'] == '云消息队列 MQ'
df.loc[mq_mask, '资源组'] = '云电脑'


# 26. 新增:产品是 "云原生大数据计算服务 MaxCompute",资源组不是“海外项目”的替换为“数据项目”
maxcompute_mask = df['产品'] == '云原生大数据计算服务 MaxCompute'
not_oversea_mask = df['资源组'] != '海外项目'

df.loc[maxcompute_mask & not_oversea_mask, '资源组'] = '数据项目'

# 27. 新增:产品是 "云原生数据库 PolarDB",资源组全部替换为“云电脑”
polardb_mask = df['产品'] == '云原生数据库 PolarDB'
df.loc[polardb_mask, '资源组'] = '云电脑'


# 28. 新增:产品是 "支持计划",资源组全部替换为“云电脑”
support_plan_mask = df['产品'] == '支持计划'
df.loc[support_plan_mask, '资源组'] = '云电脑'


# 29. 新增规则:产品是 "阿里邮箱" 的情况处理,资源组全部替换为“云电脑”
ali_email_mask = df['产品'] == '阿里邮箱'
df.loc[ali_email_mask, '资源组'] = '云电脑'

# 29. 新增:产品是 "弹性公网IP",且实例ID为 eip-bp1au1g58cg8xqfz5fnkz → 替换为 “云平台”
eip_mask = (df['产品'] == '弹性公网IP') & (df['实例ID'] == 'eip-bp1au1g58cg8xqfz5fnkz')
df.loc[eip_mask, '资源组'] = '云平台'




# 保存为新的 Excel 文件
df.to_excel('5monthnew.xlsx', index=False)

print("Excel 文件已成功修改并保存为 5monthnew.xlsx")

# 可选:输出最终资源组分布
print("\n最终资源组分布:")
print(df['资源组'].value_counts())





posted @ 2025-06-28 10:55  六月OvO  阅读(18)  评论(0)    收藏  举报