Files
F6--/张阳脚本/简道云刷数据/续约待办历史数据刷写.ipynb
T
2026-01-30 11:28:35 +08:00

176 lines
8.3 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "initial_id",
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from datetime import datetime\n",
"\n",
"# 读取旧数据,记得排除下有订单的\n",
"old_df = pd.read_excel(\"C:\\Users\\hp_z66\\Desktop\\(流程)续约服务流程进行中.xlsx\") # 或 read_csv\n",
"\n",
"# 初始化新 DataFrame(列按新表头)\n",
"new_columns = [\n",
" \"关联数据\", \"公司名称\", \"门店名称\", \"门店编码\", \"加盟商\", \"过期日\", \"Saas版本\",\n",
" \"上次购买价格\", \"联系人\", \"联系手机号\", \"运营顾问\", \"订单商品名称\",\n",
" \"120天是否跟进\", \"120天处理人\", \"120天跟进时间\",\n",
" \"60天是否跟进\", \"60天处理人\", \"60天跟进时间\",\n",
" \"30天是否跟进\", \"30天处理人\", \"30天跟进时间\",\n",
" \"是否联系上\", \"现阶段问题\", \"未联系原因\", \"联系情况及问题说明\", \"回访方式\",\n",
" \"潜在商机\", \"商机归属\", \"商机详情\", \"续约意愿\", \"不续约原因\",\n",
" \"产品问题\", \"服务问题\", \"门店问题\", \"价格问题\", \"不续约具体情况说明\",\n",
" \"周期性增购\", \"连锁门店待办同步处理\", \"选择需要同步的门店名称\",\n",
" \"订单编码\", \"订单支付日期\", \"本次-实付金额(元)\", \"业务类型(续约、升级)\",\n",
" \"120天自动流转时间\", \"60天自动流转时间\", \"30天自动流转时间\", \"0天自动流转时间\",\n",
" \"当前所处节点\", \"流程状态\", \"经营模式\", \"程序关停\", \"区域客服\", \"公司等级\",\n",
" \"运营专家\", \"流水号\", \"是否已同步宜搭\", \"连锁店数据同步辅助:门店列表\",\n",
" \"公司id\", \"提交人\", \"提交时间\", \"更新时间\", \"流程状态\", \"当前节点\", \"当前负责人\",\n",
" \"商品名称\", \"购买数量\", \"购买金额\", \"应续约日\", \"是否愿意续约\", \"不续约原因\", \"续约后订单编码\"\n",
"]\n",
"\n",
"new_df = pd.DataFrame(columns=new_columns)\n",
"\n",
"# 字段映射\n",
"mapping = {\n",
" \"门店名称\": \"门店名称\",\n",
" \"门店编码\": \"门店编码\",\n",
" \"加盟商\": \"加盟商\",\n",
" \"过期日\": \"过期日\",\n",
" \"Saas版本\": \"Saas版本\",\n",
" \"上次购买价格\": \"上次购买价格\",\n",
" \"联系人\": \"联系人\",\n",
" \"联系手机号\": \"联系手机号\",\n",
" \"专属运营顾问\": \"运营顾问\",\n",
" \"订单编码\": \"订单编码\",\n",
" \"订单支付日期\": \"订单支付日期\",\n",
" \"公司等级\": \"公司等级\",\n",
" \"联系情况及问题说明\": \"联系情况及问题说明\",\n",
" \"产品原因\": \"产品问题\",\n",
" \"服务问题\": \"服务问题\",\n",
" \"门店原因\": \"门店问题\",\n",
" \"价格原因\": \"价格问题\",\n",
" \"不续约具体情况说明\": \"不续约具体情况说明\",\n",
" \"公司名称\": \"公司名称\",\n",
" \"经营模式\": \"经营模式\",\n",
" \"区域客服\": \"区域客服\",\n",
" \"提交人\": \"提交人\",\n",
" \"创建时间\": \"提交时间\",\n",
" \"最近修改时间\": \"更新时间\",\n",
" \"应续约日\": \"应续约日\",\n",
" \"区域经理\": \"运营专家\", # 假设区域经理作为运营专家\n",
"}\n",
"\n",
"# 处理每一行\n",
"def map_row(row):\n",
" new_row = {col: None for col in new_columns}\n",
"\n",
" # 基础映射\n",
" for old_col, new_col in mapping.items():\n",
" if old_col in row.index:\n",
" new_row[new_col] = row[old_col]\n",
"\n",
" # 自动流转时间\n",
" new_row['120天自动流转时间'] = new_row['过期日'] - pd.Timedelta(days=60)\n",
" new_row['60天自动流转时间'] = new_row['过期日'] - pd.Timedelta(days=30)\n",
" new_row['30天自动流转时间'] = new_row['过期日'] - pd.Timedelta(days=0)\n",
" new_row['0天自动流转时间'] = new_row['过期日'] + pd.Timedelta(days=90)\n",
"\n",
"\n",
" # 是否跟进逻辑(根据处理人是否为空)\n",
" new_row[\"120天处理人\"] = row.get(\"120天处理人\", None)\n",
" new_row[\"60天处理人\"] = row.get(\"60天处理人\", None)\n",
" new_row[\"30天处理人\"] = row.get(\"30天处理人\", None)\n",
"\n",
" new_row[\"120天是否跟进\"] = pd.notna(new_row[\"120天处理人\"])\n",
" new_row[\"60天是否跟进\"] = pd.notna(new_row[\"60天处理人\"])\n",
" new_row[\"30天是否跟进\"] = pd.notna(new_row[\"30天处理人\"])\n",
"\n",
" # 跟进时间:用最近修改时间或留空\n",
" update_time = row.get(\"最近修改时间\", None)\n",
" new_row[\"120天跟进时间\"] = update_time\n",
" new_row[\"60天跟进时间\"] = update_time\n",
" new_row[\"30天跟进时间\"] = update_time\n",
"\n",
" # 是否联系上:旧表有“是否联系上客户”\n",
" contacted = row.get(\"是否联系上客户\", None)\n",
" if pd.notna(contacted):\n",
" new_row[\"是否联系上\"] = contacted\n",
" else:\n",
" # 或根据联系情况推断\n",
" new_row[\"是否联系上\"] = \"是\" if pd.notna(row.get(\"联系情况及问题说明\")) else \"否\"\n",
"\n",
" # 续约意愿\n",
" willing = row.get(\"门店是否愿意续约\", None)\n",
" new_row[\"是否愿意续约\"] = willing\n",
" new_row[\"续约意愿\"] = \"愿意\" if willing == \"是\" else (\"不愿意\" if willing == \"否\" else willing)\n",
"\n",
" # 不续约原因(合并分类)\n",
" reasons = []\n",
" if row.get(\"产品原因\") == \"是\": reasons.append(\"产品问题\")\n",
" if row.get(\"服务问题\") == \"是\": reasons.append(\"服务问题\")\n",
" if row.get(\"门店原因\") == \"是\": reasons.append(\"门店问题\")\n",
" if row.get(\"价格原因\") == \"是\": reasons.append(\"价格问题\")\n",
" new_row[\"不续约原因\"] = \"; \".join(reasons) if reasons else None\n",
"\n",
" # 流程状态:根据实例状态或审批结果\n",
" status = row.get(\"实例状态\", \"\")\n",
" if \"完成\" in str(status) or \"通过\" in str(status):\n",
" new_row[\"流程状态\"] = \"已完成\"\n",
" elif \"终止\" in str(status) or \"拒绝\" in str(status):\n",
" new_row[\"流程状态\"] = \"已终止\"\n",
" else:\n",
" new_row[\"流程状态\"] = \"进行中\"\n",
"\n",
" new_row[\"当前所处节点\"] = row.get(\"当前审批节点\", None)\n",
" new_row[\"当前节点\"] = new_row[\"当前所处节点\"]\n",
"\n",
" # 默认值填充\n",
" new_row[\"业务类型(续约、升级)\"] = \"续约\"\n",
" new_row[\"回访方式\"] = \"电话\"\n",
" new_row[\"程序关停\"] = False\n",
" new_row[\"是否已同步宜搭\"] = False\n",
" new_row[\"商品名称\"] = \"SaaS服务\"\n",
" new_row[\"购买数量\"] = 1\n",
" new_row[\"购买金额\"] = row.get(\"上次购买价格\", None)\n",
"\n",
" return pd.Series(new_row)\n",
"\n",
"# 应用映射\n",
"new_df = old_df.apply(map_row, axis=1)\n",
"\n",
"# 保存\n",
"new_df.to_excel(\"new_table_migrated.xlsx\", index=False)\n",
"print(\"迁移完成!\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}